日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【Alljoyn】 Alljoyn学习笔记七 Alljoyn瘦客户端库介绍

發(fā)布時(shí)間:2024/4/20 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Alljoyn】 Alljoyn学习笔记七 Alljoyn瘦客户端库介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Alljoyn瘦客戶端庫(kù)介紹(上)

?

1、簡(jiǎn)介
  本文檔對(duì)AllJoynTM瘦客戶端的核心庫(kù)文件(AJTCL)進(jìn)行了詳盡的介紹。本文檔介紹了系統(tǒng)整體架構(gòu),AllJoyn框架結(jié)構(gòu),并著重于介紹如何將嵌入式設(shè)備加入AllJoyn系統(tǒng)整體架構(gòu)中。
1.1目的
  本文檔介紹了如何使一個(gè)受限于功耗、計(jì)算能力和內(nèi)存的設(shè)備(嵌入式設(shè)備)加入AllJoyn分布式系統(tǒng)。具體而言,本文檔包括了對(duì)AllJoyn面向嵌入式系統(tǒng)的方面的介紹,并著重描述了基于AllJoyn的系統(tǒng)的各個(gè)組件是如何與嵌入式設(shè)備協(xié)作以構(gòu)建一個(gè)基于接近式結(jié)構(gòu)的,點(diǎn)對(duì)點(diǎn)的計(jì)算系統(tǒng)。
1.2適用人群
本文檔適用于任何想將嵌入式設(shè)備加入點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)的電子愛好者,包括應(yīng)用開發(fā)人員、系統(tǒng)軟件開發(fā)人員、網(wǎng)絡(luò)專家、設(shè)備操作人員和系統(tǒng)經(jīng)理。我們假設(shè)讀者已經(jīng)對(duì)嵌入式系統(tǒng)有了基本的認(rèn)識(shí),并且已經(jīng)理解了了《Introduction to the AllJoyn Framework》(AllJoyn架構(gòu)介紹)一文說描述的AllJoyn系統(tǒng)概況。

2、綜述
  AllJoyn是一個(gè)開源的軟件系統(tǒng),用于將運(yùn)行在不同類別設(shè)備上的分布式應(yīng)用構(gòu)建成一個(gè)分布式環(huán)境,并著重于便攜性、安全性和可動(dòng)態(tài)配置性。AllJoyn不依賴于平臺(tái),即它的設(shè)計(jì)盡可能地獨(dú)立于其所運(yùn)行的操作系統(tǒng)和軟硬件。

  AllJoyn標(biāo)準(zhǔn)核心庫(kù)(AJSCL)被設(shè)計(jì)成可用于 Microsoft Windows、Linux、Android、iOS、OS X、OpenWRT和瀏覽器插件的系統(tǒng)環(huán)境中。這些軟件系統(tǒng)的共同特點(diǎn)是它們運(yùn)行于通用型計(jì)算機(jī)系統(tǒng)。通用型計(jì)算機(jī)通常擁有相當(dāng)數(shù)量的內(nèi)存、足夠大的功耗和計(jì)算能力,甚至很多操作系統(tǒng)都支持多處理器、多線程和多語言環(huán)境。

  與之相對(duì)的是,嵌入式系統(tǒng)往往只針對(duì)單一功能,并運(yùn)行于某個(gè)設(shè)備中的嵌入式處理器中。由于其需要完成的功能有限,工程師們往往通過減小內(nèi)存容量、降低處理器速度和功耗、減少外設(shè)接口和用戶接口等方式來優(yōu)化系統(tǒng),以降低產(chǎn)品成本和體積。AllJoyn 瘦客戶端核心庫(kù)(AJTCL)便是針對(duì)嵌入式系統(tǒng)的分布式編程所設(shè)計(jì)。

  由于AJTCL的運(yùn)行環(huán)境資源有限,AllJoyn組件定會(huì)受到此系統(tǒng)的很多限制。具體來說,這意味著我們無法像編寫AllJoyn路由程序一樣(需要多線程支持)使用多個(gè)網(wǎng)絡(luò)連接和大量的RAM和ROM資源,也無法使用那些支持多語言的面向?qū)ο蟮木幊汰h(huán)境。鑒于這種情況,AJTCL僅僅包含了一些總線連接程序(參看《Introduction to the AllJoyn Framework》一文),并完全由C語言寫成。其對(duì)應(yīng)于接口、方法、信號(hào)、屬性和總線對(duì)象的數(shù)據(jù)結(jié)構(gòu)都經(jīng)過了大幅優(yōu)化以減少空間占用,同時(shí)API(應(yīng)用程序接口)也大不相同。
盡管AJTCL與AJSCL的API大不相同,但他們所有的核心概念都是相通的,AJTCL只是以一個(gè)更緊湊的形式出現(xiàn),或者實(shí)際上是遠(yuǎn)程運(yùn)行在一個(gè)(計(jì)算能力)更強(qiáng)的機(jī)器上。

3、概念性模型
  如之前章節(jié)中所言,絕大多數(shù)在AJTCL中所使用的高度抽象的概念都與其在AJSCL系統(tǒng)中的概念相同。《Introduction to the AllJoyn Framework》一文中“Conceptual Overview”一章已經(jīng)向讀者介紹了這些概念。在本章中,我們假設(shè)讀者已經(jīng)對(duì)上文的相關(guān)概念有所熟悉,因此本章只介紹兩者的不同點(diǎn),用于幫助讀者理解AJTCL的架構(gòu)。
3、1 AllJoyn瘦客戶端核心庫(kù)仍然是AllJoyn
  理解“AJTCL是AllJoyn架構(gòu)的一部分”對(duì)于理解整個(gè)AllJoyn系統(tǒng)很重要。瘦客戶端的核心庫(kù)程序可完全地與AJSCL互動(dòng)。鑒于AllJoyn網(wǎng)絡(luò)傳輸協(xié)議在兩種類型的庫(kù)中都有實(shí)現(xiàn),AJSCL程序完全不用考慮他到底是在跟AJTCL程序?qū)υ掃€是在跟AJSCL程序?qū)υ挕?br />   回顧《Introduction to the AllJoyn Framework》一文,AllJoyn分布式總線的基本結(jié)構(gòu)由幾個(gè)處于不同的、物理上分離的計(jì)算機(jī)系統(tǒng)所構(gòu)成,如圖1所示。

  如圖所示,下標(biāo)為Host A和Host B的兩個(gè)虛線框表示在給定的兩個(gè)主機(jī)(host computer)上的兩個(gè)總線段(bus segment)。每個(gè)總線段都包含一個(gè)AllJoyn路由節(jié)點(diǎn)(以標(biāo)注了D字母的圓圈表示)。一個(gè)主機(jī)上可能連接了多個(gè)總線掛件(bus attachments),每個(gè)總線掛件都與一個(gè)本地的守護(hù)進(jìn)程(以六邊形表示)相連接。這些總線掛件分為服務(wù)器(services)和客戶端(clients)兩類。
  由于運(yùn)行AJTCL的設(shè)備通常沒有足夠的資源運(yùn)行路由程序,AllJoyn架構(gòu)對(duì)瘦客戶端進(jìn)行了一些改變,使運(yùn)行瘦客戶端的設(shè)備借助于分布總線上其他主機(jī)上的AllJoyn路由程序連接到AllJoyn網(wǎng)絡(luò)。具體方法如圖2所示。請(qǐng)注意嵌入式系統(tǒng)A(Embedded System A)和嵌入式系統(tǒng)B(Embedded System B)與運(yùn)行路由程序并管理該分布式總線段的主機(jī)B(Host B)并不是同一個(gè)設(shè)備。這些運(yùn)行AJTCL的嵌入式系統(tǒng)與該總線段上的主機(jī)路由程序之間的連接通過TCP協(xié)議(傳輸控制協(xié)議,Transmission Control Protocol)實(shí)現(xiàn)。

  其中,嵌入式系統(tǒng)和路由節(jié)點(diǎn)之間的通信流稱為AllJoyn消息,如《Introduction to the AllJoyn Framework》一文所述,包括總線方法、總線信號(hào)和對(duì)應(yīng)于各個(gè)對(duì)話的屬性流。
  在某些場(chǎng)合,我們?cè)试SAJTCL設(shè)備連接并借助附近尋找到的老式路由節(jié)點(diǎn)。我們稱這種連接關(guān)系為“不受信的關(guān)系”(以路由節(jié)點(diǎn)的視角)。同樣在某些場(chǎng)合,我們只允許特定的AJTCL設(shè)備連接到特定的路由節(jié)點(diǎn)。我們稱這種關(guān)系為“受信關(guān)系”(同樣從路由節(jié)點(diǎn)的視角)。
  這些關(guān)系的建立依賴于一個(gè)在概念上與客戶端與服務(wù)器之間的發(fā)現(xiàn)和連接過程相似的發(fā)現(xiàn)和連接過程。一個(gè)AllJoyn路由節(jié)點(diǎn)通過廣播一個(gè)眾所周知的名稱來表達(dá)其對(duì)接管一類AJTCL設(shè)備的意愿。這個(gè)廣播可能以路由配置包或以一個(gè)具體的AllJoyn組件建立的廣播包的形式出現(xiàn)。緊隨其后的一個(gè)來自設(shè)備的連接請(qǐng)求將會(huì)使預(yù)備建立受信連接的路由節(jié)點(diǎn)開始詢問發(fā)送該請(qǐng)求的AJTCL(或冒名頂替的AJTCL)以建立一個(gè)憑證。在建立非受信連接的情況下,路由節(jié)點(diǎn)將會(huì)允許任何連接請(qǐng)求。對(duì)于非受信連接,路由節(jié)點(diǎn)不會(huì)允許AJTCL執(zhí)行任何需要建立遠(yuǎn)程對(duì)話的操作(和任何需要付費(fèi)的操作)。
正如以上所引述的,一個(gè)AJTL設(shè)備建立連接的過程可以分為三個(gè)步驟:
發(fā)現(xiàn)過程
連接過程
認(rèn)證過程
  其中,發(fā)現(xiàn)過程除了兩種例外情況以外,都如《Introduction to the AllJoyn Framework》一文中所描述的那樣,就像是某種服務(wù)廣播。第一種例外是AJTL發(fā)現(xiàn)廣播的方式通常是“靜默的”廣播。這表明路由節(jié)點(diǎn)不是無緣無故地發(fā)送此廣播。
  第二種例外是對(duì)靜默廣播的響應(yīng)通常是靜默的——我們稱之為“靜默響應(yīng)”。這表明響應(yīng)將被單播回發(fā)送者,而不是像活躍廣播一樣被多播出去。這么做的主要原因是為了使某些無法實(shí)現(xiàn)多播的嵌入式設(shè)備加入Alljoyn分布式系統(tǒng)。
3.2什么是AllJoyn瘦客戶端核心庫(kù)設(shè)備?
  人們通常人為AJTCL設(shè)備和傳感器網(wǎng)絡(luò)(Wireless Sensor Network,WSN)中的傳感器節(jié)點(diǎn)(Sensor Node,SN)在概念上很相似。傳感器節(jié)點(diǎn)通常是某些小體積、低功耗、低配置的傳感器或者執(zhí)行器件。它們通常可以檢測(cè)周圍環(huán)境、與外界通信,甚至有可能在基于網(wǎng)絡(luò)處理或外界事件的激勵(lì)下執(zhí)行某種動(dòng)作。這是一個(gè)非常寬泛的定義,下面舉的一部分設(shè)備的例子適用于這個(gè)定義:
點(diǎn)燈開關(guān)
自動(dòng)調(diào)溫器
空調(diào)
排風(fēng)閥
煙霧傳感器
運(yùn)動(dòng)檢測(cè)傳感器
人體傳感器
麥克風(fēng)
揚(yáng)聲器
耳機(jī)

門鈴
烤箱
電冰箱
烤面包機(jī)
  關(guān)于無線傳感器網(wǎng)絡(luò)的文章一搜一大把。AllJoyn系統(tǒng)與之不同的是,無線傳感器網(wǎng)絡(luò)通常使用自組織、多跳、點(diǎn)對(duì)點(diǎn)的無線網(wǎng)絡(luò)(Self-organizing multi-hop ad hoc wireless networks),而不會(huì)主要關(guān)注安全問題;而AllJoyn架構(gòu)就像是運(yùn)行于基礎(chǔ)模式的Wi-Fi網(wǎng)絡(luò),即給定的設(shè)備必須經(jīng)過認(rèn)證和組織。為了完成某個(gè)Wi-Fi網(wǎng)絡(luò)的身份認(rèn)證,AJTCL使用了一個(gè)名為“onboarding”的過程。這個(gè)登陸服務(wù)的架構(gòu)允許一個(gè)假定沒有友好的用戶接口的運(yùn)行瘦客戶端的設(shè)備從他的目標(biāo)網(wǎng)絡(luò)獲取足夠的信息,用以完成加入目標(biāo)網(wǎng)絡(luò)所需的身份認(rèn)證過程。這個(gè)登錄服務(wù)架構(gòu)將在一個(gè)專門的文檔中定義并介紹。
  如同一個(gè)傳感器節(jié)點(diǎn)所扮演的角色一樣,一個(gè)AJTCL設(shè)備通常包含一項(xiàng)AllJoyn發(fā)現(xiàn)服務(wù)。該服務(wù)會(huì)以AllJoyn信號(hào)的形式通過連接的硬件和通信事件探索自己的周圍環(huán)境。如《Introduction to the AllJoyn Framework》一文所描述,它可以通過監(jiān)聽其他設(shè)備發(fā)來的信號(hào),或者響應(yīng)其他AllJoyn客戶端的遠(yuǎn)程方法,從而對(duì)外界事件進(jìn)行響應(yīng)。

?

?

4 瘦客戶端核心庫(kù)架構(gòu)

  由于AllJoyn瘦客戶端核心庫(kù)(AJTCL)必須運(yùn)行在那些功耗受限、計(jì)算能力有限、資源緊缺的設(shè)備上,因此它無法像運(yùn)行在通用型計(jì)算機(jī)系統(tǒng)上那樣使用和AllJoyn標(biāo)準(zhǔn)核心庫(kù)(AJSCL)一樣的架構(gòu)。
  一個(gè)AJSL或服務(wù)進(jìn)程的分層結(jié)構(gòu)如圖3所示。《Introduction to the AllJoyn Framework》一文描述了這些層次結(jié)構(gòu)的更詳盡細(xì)節(jié)。需要特別注意的是, 每個(gè)Alljoyn客戶端或服務(wù)器程序都會(huì)以這種層次結(jié)構(gòu)來構(gòu)建AllJoyn應(yīng)用。

  每個(gè)運(yùn)行AJSCL的主機(jī)上至少都要運(yùn)行一個(gè)路由程序。這個(gè)路由程序可以以單獨(dú)的路由進(jìn)程形式運(yùn)行,或者寄生于某個(gè)應(yīng)用程序中運(yùn)行。AJSCL路由程序的分層結(jié)構(gòu)如圖4所示。

  注意到,路由程序可以為路由節(jié)點(diǎn)之間路由消息的傳遞提供額外的支持,并能支持如Wi-Fi Direct的多重網(wǎng)絡(luò)傳輸機(jī)制。這個(gè)功能可以有效地降低計(jì)算能力、功耗和內(nèi)存的開銷。
  我們很明顯無法在嵌入式系統(tǒng)中運(yùn)行如此數(shù)量的程序,所以AJTCL最大程度地縮減了在給定設(shè)備上運(yùn)行所需的代碼量。AJTCL只使用最基礎(chǔ)的C運(yùn)行環(huán)境,并通過借助其他設(shè)備的計(jì)算能力實(shí)現(xiàn)路由規(guī)則。如圖5所示,對(duì)比AJSCL,AJTCL舍去了大部分AJSL系統(tǒng)開銷。AJTL僅僅為總線掛件提供少量必須的API(應(yīng)用程序接口),并將AllJoyn消息接口直接提供給程序員,而不是提供間接的接口函數(shù)。

  消息層沒有提供抽象的傳輸機(jī)制,而是直接使用了用戶數(shù)據(jù)塊傳輸協(xié)議(UDP)和TCP協(xié)議。分層結(jié)構(gòu)中的端口層非常簡(jiǎn)單,又幾個(gè)簡(jiǎn)單必須的本地系統(tǒng)函數(shù)構(gòu)成。為了是代碼體積最小化,其完全以C語言寫成。由于使用了這些優(yōu)化機(jī)制,一個(gè)AJTCL系統(tǒng)只需25K字節(jié)的內(nèi)存就可運(yùn)行,而一個(gè)綁定了路由功能和C++版本客戶端和服務(wù)器程序的應(yīng)用可能需要十倍數(shù)額的內(nèi)存開銷,而一個(gè)Java語言版本的AllJoyn程序則需要40倍左右的開銷。

5 整合運(yùn)行

?

  為了使本章的討論更加具體,在此舉了兩個(gè)分布式系統(tǒng)的例子。第一個(gè)例子是一個(gè)最小化的AllJoyn系統(tǒng),由一個(gè)運(yùn)行在智能手機(jī)上的AllJoyn應(yīng)用程序和一個(gè)簡(jiǎn)單的AJTCL設(shè)備構(gòu)成。此例闡述了上文描述的受信路由關(guān)系。第二個(gè)例子稍微復(fù)雜一些,包括一個(gè)運(yùn)行在無線路由器上的路由程序。
    注釋  通常的情形是由一個(gè)運(yùn)行OpenWRT系統(tǒng)的路由器來運(yùn)行預(yù)裝好的AllJoyn路由程序。此路由程序接受那些連接到Wi-Fi網(wǎng)絡(luò)的瘦客戶端庫(kù)發(fā)來的非受信連接請(qǐng)求。
  少量AJTCL設(shè)備連接到路由器,并在基于AllJoyn的無線傳感器網(wǎng)絡(luò)中扮演傳感器節(jié)點(diǎn)的角色,而一個(gè)通用型計(jì)算機(jī)則完成數(shù)據(jù)融合的工作。
    注釋  在無線傳感器網(wǎng)絡(luò)中,數(shù)據(jù)融合是將一些不同的節(jié)點(diǎn)收集到的結(jié)果整合到一起的過程,或者將其結(jié)果與其他傳感節(jié)點(diǎn)獲得的結(jié)果融合到一起,以便做出決策。

5.1 一個(gè)最小化的瘦客戶端系統(tǒng)

?

  一個(gè)最小化的使用AJTCL的系統(tǒng)包括一個(gè)運(yùn)行AJSCL的主機(jī)和一個(gè)瘦客戶端設(shè)備。AJSCL給將要連接到它的瘦客戶端提供AllJoyn路由功能,同時(shí)也為使用瘦客戶端的應(yīng)用提供平臺(tái)。就如之所說,瘦客戶端設(shè)備通常扮演傳感器節(jié)點(diǎn)的角色,它向運(yùn)行在主機(jī)上的應(yīng)用程序發(fā)送信息。應(yīng)用程序以某種方式處理這些信息,并向傳感器節(jié)點(diǎn)發(fā)送一些命令,使其應(yīng)對(duì)當(dāng)前環(huán)境。
  考慮一種簡(jiǎn)單但可能欠考慮的情況,一個(gè)壁掛式恒溫器控制著一個(gè)電爐,并在一個(gè)安卓設(shè)備上運(yùn)行著一個(gè)控制應(yīng)用。安卓設(shè)備上運(yùn)行AJSCL,而壁掛式恒溫器上運(yùn)行著AJTCL。該系統(tǒng)可以用圖6來表示。

  在本例中,一個(gè)需求是壁掛式恒溫器,其只能被安卓設(shè)備中對(duì)應(yīng)的恒溫器控制程序所控制。
盡管在本例的需求中說明了恒溫器僅可被安卓設(shè)備控制,但需求也可以是恒溫器連接到某個(gè)路由節(jié)點(diǎn),再由該路由節(jié)點(diǎn)連接到應(yīng)用程序。這意味著安卓應(yīng)用程序應(yīng)該與AllJoyn路由程序綁定在一起,而這個(gè)綁定在一起的路由程序和應(yīng)用程序應(yīng)該以一個(gè)路由節(jié)點(diǎn)的身份提供給瘦客戶端使用。這種配置允許在AJTCL和路由節(jié)點(diǎn)/應(yīng)用程序?qū)χ薪⒁环N受信關(guān)系。
  應(yīng)用程序接著請(qǐng)求與他綁定的路由程序以一個(gè)眾所周知的命名方式向AJTCL發(fā)送一個(gè)“安靜的”廣播(例如,com.company.BusNode<guid>)。路由程序接著準(zhǔn)備響應(yīng)那些以之前廣播的命名方式命名的安靜的(單播)的回復(fù)。當(dāng)瘦客戶端出現(xiàn)時(shí),它應(yīng)當(dāng)在關(guān)聯(lián)的網(wǎng)絡(luò)前綴(com.company.BusNode)上啟用發(fā)現(xiàn)過程,如圖7所示。

  當(dāng)路由節(jié)點(diǎn)收到一個(gè)對(duì)其之前“安靜地”廣播過的名字的明確的請(qǐng)求時(shí),它將回應(yīng)一個(gè)表明該名字是由此路由節(jié)點(diǎn)所廣播的消息。接下來AJTCL會(huì)嘗試連接到這個(gè)響應(yīng)的路由節(jié)點(diǎn)。過程如圖8所示。

  這樣一來,一個(gè)邏輯上的AllJoyn總線就已經(jīng)建立起來了,應(yīng)用程序和瘦客戶端服務(wù)通過運(yùn)行在安卓設(shè)備上的路由程序連接起來。以在《Introduction to the AllJoyn Framework》一文中使用過的泡泡圖來表示該系統(tǒng),這種配置看上去就像是AllJoyn路由節(jié)點(diǎn)連接了服務(wù)器程序和客戶端程序,如圖9所示。

  此時(shí),AJTCL已經(jīng)連接到與應(yīng)用程序綁定在一起的路由程序,但是應(yīng)用程序和瘦客戶端互相都不知道對(duì)方的存在。一般在此時(shí),AJTCL便會(huì)請(qǐng)求一個(gè)眾所周知的總線名,并會(huì)在AllJoyn的感知下實(shí)例化一個(gè)服務(wù)。如《Introduction to the AllJoyn Framework》一文所描述,瘦客戶端會(huì)使用瘦客戶端核心庫(kù)的API接口創(chuàng)建一個(gè)對(duì)話端口并廣播一個(gè)眾所周知的名稱。這個(gè)名稱一般不會(huì)和路由節(jié)點(diǎn)廣播的名稱相同;它與瘦客戶端和應(yīng)用間的客戶端/服務(wù)器的關(guān)系有關(guān),而與路由節(jié)點(diǎn)—瘦客戶端間的關(guān)系無關(guān)。運(yùn)行在安卓設(shè)備上的應(yīng)用程序?qū)?huì)針對(duì)這個(gè)名稱運(yùn)行發(fā)現(xiàn)服務(wù),如圖10所示。

  當(dāng)運(yùn)行在AJTCL上的服務(wù)被運(yùn)行在安卓設(shè)備上的客戶端發(fā)現(xiàn)時(shí),該客戶端會(huì)加入此服務(wù)創(chuàng)建的對(duì)話。

  從這個(gè)角度來說,運(yùn)行在安卓設(shè)備上的應(yīng)用程序可以訪問到AJTCL的服務(wù),而且可以是任何AllJoyn服務(wù)。它可能通報(bào)服務(wù)發(fā)送的信號(hào)——在此例中,可能是包含當(dāng)前溫度的周期信號(hào)。此應(yīng)用可能構(gòu)建一個(gè)用戶界面,允許用戶鍵入期望達(dá)到的溫度,并將此溫度使用如《Introduction to the AllJoyn Framework》一文所描述的AllJoyn遠(yuǎn)程方法發(fā)送給AJTCL。一旦收到一個(gè)呼叫方法,運(yùn)行在AJTCL上的服務(wù)程序便會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到電爐以設(shè)置理想溫度。
在瘦客戶端上使用的API和在AJSCL或服務(wù)程序上使用的API有很大的不同;盡管在兩種情況下,傳輸協(xié)議是完全一樣的,但對(duì)于其中一方而言,另一方組件的性狀是不可見的。從這方面而言,AllJoyn是獨(dú)一無二的,而之前框圖中的各個(gè)泡泡,包括瘦客戶端,從其目的或行為來看都是沒有區(qū)別的。

5.2 一個(gè)基于瘦客戶端庫(kù)的無線傳感器網(wǎng)絡(luò)
  本例描述了一個(gè)非常基礎(chǔ)的家庭管理系統(tǒng)。該系統(tǒng)的無線接入點(diǎn)是一個(gè)運(yùn)行OpenWRT的路由器,在其上預(yù)裝了一個(gè)允許來自瘦客戶端的非受信連接的AllJoyn路由程序。這樣AJTCL客戶端便可以通過連接到該路由節(jié)點(diǎn)接入系統(tǒng)。網(wǎng)絡(luò)中的瘦客戶端設(shè)備可以是溫度傳感器、運(yùn)動(dòng)檢測(cè)傳感器、電燈開關(guān)、熱水器、電爐或空調(diào)。
  如之前所言,本例中的數(shù)據(jù)融合功能由一個(gè)運(yùn)行在通用型計(jì)算機(jī)上的應(yīng)用程序?qū)崿F(xiàn)并整合顯示。這并不是說在該網(wǎng)絡(luò)中一定要有一個(gè)通用型計(jì)算機(jī)——數(shù)據(jù)融合可以以其他方式實(shí)現(xiàn);但是,在本例中的通用型計(jì)算機(jī)可以幫助我們理解AJSCL和瘦客戶端設(shè)備是如何互動(dòng)的。整合顯示可以使用壁掛式的顯示設(shè)備,或者簡(jiǎn)單地在家中的某個(gè)PC上顯示。舉例而言,該顯示程序可以提供不同房間的溫控器和溫度計(jì)的用戶接口;或者是虛擬的電燈開關(guān),或運(yùn)動(dòng)檢測(cè)儀。數(shù)據(jù)融合算法程序?qū)?huì)決定什么時(shí)候開燈,如何控制電爐或空調(diào)的開關(guān),或者如何最有效地控制熱水器的溫度。
  要考慮的第一個(gè)組件是如圖12所示的OpenWRT路由器。該路由器管控一個(gè)獨(dú)立的AllJoyn路由域(在圖中以黑色粗水平線表示,代表一個(gè)AllJoyn分布式軟件總線的一個(gè)總線段)。

  在該路由器所在的總線段中有一個(gè)AllJoyn服務(wù)程序,該程序使用AllJoyn架構(gòu)提供了一種方式來配置路由器和預(yù)裝在路由器上的路由程序。此外,圖中的一些空槽表示與AJTCL之間的非受信連接。由于這是一個(gè)通用AllJoyn路由器,對(duì)應(yīng)的軟件總線可以被擴(kuò)展到其他的總線段以形成如圖1所示的分布式總線。
  如之前的章節(jié)所述,AJTCL設(shè)備將會(huì)運(yùn)行發(fā)現(xiàn)過程以搜尋他們能連接到的路由節(jié)點(diǎn)。盡管在此描述的是一個(gè)非受信關(guān)系,運(yùn)行在OpenWRT路由器上的AllJoyn路由程序可以配置成“安靜地”廣播一個(gè)通用的名稱,如org.alljoyn.BusNode,暗示該路由節(jié)點(diǎn)是一個(gè)AllJoyn分布式總線上的一個(gè)節(jié)點(diǎn),并意圖接管瘦客戶端。
  代表傳感器節(jié)點(diǎn)的AJTL設(shè)備通過登錄過程接入無線網(wǎng)絡(luò)。在此過程中,他們以所謂的友好的名稱(即有意義的名稱)來命名。舉例說,一個(gè)電燈控制器(開-關(guān)-調(diào)光控制器)可能被命名為“廚房”,而另一個(gè)可能被命名為“臥室”。對(duì)應(yīng)的瘦客戶端節(jié)點(diǎn)開始探索他們連接的路由節(jié)點(diǎn)(可能是org.alljoyn.BusNode),并嘗試連接。盡管上圖中的很多“槽”假定是非受信的,瘦客戶端設(shè)備還是可以如圖13所示那樣加入網(wǎng)絡(luò)。

  一旦瘦客戶端程序連接到了OpenWRT路由器所在的總線段,它們就會(huì)開始廣播其對(duì)應(yīng)的服務(wù)。如之前所假設(shè)的,這是一個(gè)家庭控制系統(tǒng),連接到路由器提供的無線網(wǎng)絡(luò)。該設(shè)備會(huì)嘗試發(fā)現(xiàn)服務(wù),并在系統(tǒng)中尋找瘦客戶端庫(kù)提供的服務(wù),如圖14所示。

一旦家庭控制系統(tǒng)發(fā)現(xiàn)了某個(gè)瘦客戶端廣播的服務(wù),它將嘗試與該瘦客戶端開始對(duì)話。其結(jié)果是路由器所在的總線段和家庭控制系統(tǒng)融合成一個(gè)虛擬分布式總線。




  當(dāng)這個(gè)融合的總線完全形成時(shí),連接到總線的設(shè)備就成了一個(gè)標(biāo)準(zhǔn)的AllJoyn客戶端或服務(wù)器。布式設(shè)備上的其他部件不會(huì)知道這些ALlJoyn瘦客戶端傳感器/執(zhí)行器實(shí)際上是嵌入式設(shè)備,并通過TCP協(xié)議連接到AllJoyn路由節(jié)點(diǎn),也不會(huì)知道家庭控制程序以Java編寫并運(yùn)行在一個(gè)運(yùn)行安卓系統(tǒng)的通用型計(jì)算機(jī)上。這些客戶端和服務(wù)器僅僅只是執(zhí)行遠(yuǎn)程呼叫方法和收發(fā)信號(hào)。
  讀者現(xiàn)在可以了解運(yùn)行在數(shù)據(jù)融合節(jié)點(diǎn)上的算法。舉例說明。在分布式總線上傳輸?shù)囊粋€(gè)重要的AllJoyn信號(hào)可能是與CARBON-MONOXIDE-DETECTED(檢測(cè)到一氧化碳)對(duì)應(yīng)的某種東西。這個(gè)信號(hào)將被家庭控制系統(tǒng)(數(shù)據(jù)融合中心)接收。家庭控制系統(tǒng)收到這個(gè)信號(hào)以后,可能會(huì)發(fā)送一個(gè)遠(yuǎn)程方法給某個(gè)執(zhí)行節(jié)點(diǎn),使其TURN-FAN_ON(打開風(fēng)扇),它也可能發(fā)送一個(gè)遠(yuǎn)程方法給另一個(gè)執(zhí)行節(jié)點(diǎn),使其SOUND-ALARM(播放報(bào)警音),還可能發(fā)送短信給屋主,告訴他家中出現(xiàn)過量的一氧化碳。
  更為常見的情形下,家庭控制系統(tǒng)還可能向電爐發(fā)送一個(gè)遠(yuǎn)程方法,使其在房間中沒人的情況下(通過運(yùn)動(dòng)檢測(cè)裝置的檢測(cè)結(jié)果和日程表判斷)降低房間溫度。房屋控制單元可能向熱水器發(fā)送一個(gè)消息,使其在工作時(shí)間和午夜降低水溫,而在午夜洗碗器需要工作時(shí)向其發(fā)送一個(gè)呼叫方法使其提高水溫,這樣一來便可以在電費(fèi)最低的時(shí)候工作。
  所有這些家庭控制系統(tǒng)響應(yīng)的信號(hào)和發(fā)送的呼叫方法都與信號(hào)發(fā)送/接受設(shè)備的類型完全無關(guān)。

6 總結(jié)
  AllJoyn是一個(gè)綜合的系統(tǒng),其設(shè)計(jì)目的是為了在成分各異的系統(tǒng)上開發(fā)分布式應(yīng)用程序。AJTCL使嵌入式設(shè)備可以加入AllJoyn分布式軟件總線,并能以忽略細(xì)節(jié)的方式在系統(tǒng)中存在,而這一點(diǎn)正是開發(fā)人員所頭疼的。這個(gè)成果可以讓應(yīng)用開發(fā)者專注于應(yīng)用程序的內(nèi)容,而不必考慮太多底層的、嵌入式系統(tǒng)網(wǎng)絡(luò)方面的事情。
  AllJoyn系統(tǒng)可以以一個(gè)整體共同工作,而不像點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò),不同節(jié)點(diǎn)間固有的不匹配會(huì)造成很多問題。我們相信,與在其他平臺(tái)上開發(fā)的應(yīng)用相比,AllJoyn系統(tǒng)可以以更簡(jiǎn)單的方式構(gòu)建包含嵌入式設(shè)備的更為強(qiáng)大的分布式應(yīng)用。

了解更多
  想要了解更多關(guān)于如何在開發(fā)中使用AllJoyn的信息,請(qǐng)?jiān)贏llSeen聯(lián)盟的網(wǎng)站上瀏覽并下載相關(guān)文檔:(www.allseenalliance.org)
    介紹型說明書——描述了ALlJoyn技術(shù)和相關(guān)概念。
    開發(fā)型說明說——介紹了如何構(gòu)建環(huán)境,并提供了對(duì)于特殊問題的解決方案,包括代碼片段的注釋。
    API參考——提供了在所有支持的編程語言中使用AllJoyn源代碼編寫應(yīng)用程序的相關(guān)細(xì)節(jié)。
    下載——軟件開發(fā)包(SDK,Software Development Kits),提供了相關(guān)資源用于幫助用戶編譯、修改、測(cè)試和執(zhí)行某個(gè)項(xiàng)目。

?

原文來自;http://www.cnblogs.com/alljoyn/p/3925910.html

?

總結(jié)

以上是生活随笔為你收集整理的【Alljoyn】 Alljoyn学习笔记七 Alljoyn瘦客户端库介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。