【Alljoyn】Alljoyn学习笔记五 AllJoyn开源技术基础概念解析
AllJoyn開源技術基礎概念解析
?
摘要: 總線(Bus) 實現P2P通信的基礎 AllJoyn 的底層協議類似于D-Bus,相當于是跨設備分布式的 D-Bus 總線附件(Bus Attachment) 每一個連接到總線上的Alljoyn應用程序被稱為總線附件,可用C++或Java編寫 每個總線附件 ...
| 總線(Bus) 實現P2P通信的基礎 AllJoyn 的底層協議類似于D-Bus,相當于是跨設備分布式的 D-Bus 總線附件(Bus Attachment) 每一個連接到總線上的Alljoyn應用程序被稱為總線附件,可用C++或Java編寫 每個總線附件有獨一的名稱(unique name),當每次連接到總線時自動分配 每個總線附件可以有一個易讀的名稱(well-known name),用于標識服務,例如“org.alljoyn.bus.addressbook” 總線接口(Bus Interfaces) 類似于Java中的接口,定義了方法、信號處理函數和屬性 所有總線方法(Bus Methods)可使用簡單或復雜的數據類型(數組、結構等)作為參數和返回值 總線對象(Bus Objects) 用于實現總線接口,每個總線對象實現一個或多個總線接口 處理遠程方法調用(Remote Method Calls)和發出信號(signals)、消息(messages) 總線對象通過總線附件注冊到總線上 每個總線對象有一個類似于文件路徑的路徑名,例如/org/AllJoyn/Games/chess,用于遠程方法調用 代理總線對象(Proxy Bus Object) 一旦總線附件之間建立連接,應用程序創建一個代理總線對象,實現遠程方法調用(Remote Method Calls)并準備好從總線上接收信號(signals) 遠程方法調用是同步的,信號則是異步的且可以一對多(廣播)或一對一 service 和 client P2P 應用中提供服務的一方稱為 service,使用服務的一方稱為 client 一個應用程序可以同時是 service 和 client(例如chat) session 在宣告服務后,service 需創建一個或多個 session,client 發現服務后加入 session 每個 session 有一個 session port,類似于 socket 通信中的 port session 的兩種情形: point-to-point session:兩個 peer 之間交互 multipoint session:多個 peer 加入同一個 session,組成一個 group AllJoyn daemon——實現P2P通信的核心 daemon通過進程間通信(IPC)與應用程序通信,應用程序只與 daemon打交道 daemon提供一個抽象層處理所有的網絡傳輸、消息路由、命名空間管理等 整個AllJoyn系統相當于一個虛擬總線,連接多個AllJoyn daemons和總線附件 daemon是用 C++編寫的 native程序,運行在不同操作系統上的 daemons可實現互聯 在應用程序啟動之前必須先啟動daemon AllJoyn daemon 在 Android 上的三種實現形式 第一種:Android app(AllJoyn.apk) 只支持 WiFi/TCP 傳輸 無需 root 權限 第二種:純C++編寫的可執行程序,在 adb shell 下運行(alljoyn-daemon) 若使用 WiFi 傳輸無需 root 權限 若使用 Bluetooth 傳輸需 root 權限,且藍牙協議棧限定用 bluez 可在 init.rc 中自動加載 第三種:與應用程序捆綁在一起(bundle),不需要單獨啟動daemon 適用于發布基于AllJoyn開發的應用程序 設備發現和建立連接的過程 注冊(Register): 連接在總線上的對象為自身進行注冊 宣告(Advertise): 連接在總線上的對象通過IP組播(multicast)宣告自身的存在 發現(Discover): 發現其他對象的存在 在使用藍牙時借助藍牙本身的 SDP 進行發現 設備連接過程示意圖: 設備之間通信的方式 遠程方法調用(同步) Signal(異步) Raw session(直接 socket 通信,應用程序可選擇基于 TCP 或 UDP ) ? |
?
Alljoyn的優勢
?AllJoyn是一個中性平臺系統,旨在簡化鄰近異構分布式移動通信網絡系統。這里的異構性不僅表示不同的設備,而且可以是具有不同操作系統和不同類型的設備(例如個人電腦、手機、平板電腦和消費性電子產品),并且使用不同的通信技術。
開源
AllJoyn是在Apache Version 2.0 license授權下作為一個開源項目進行開發的。這代表所有的AllJoyn代碼庫都是可供查閱的,并且鼓勵開發者進行補充和改進。如果AllJoyn缺少某個功能,你可以對此作出改進和貢獻。如果你在嵌入式設備中使用AllJoyn,或者有任何技術性問題,我們開源社區中的眾多參都會愿意提供幫助和指導。AllJoyn的代碼庫可以在http://www.alljoyn.org中獲得。
操作系統的獨立性
AllJoyn提供了一個抽象層,允許AllJoyn及其應用程序運行在多個操作系統平臺上。AllJoyn支持大部分的標準Linux發行版本包括Ubuntu等,并可以運行在Android 2.2和更高版本的智能手機和平板設備上。AllJoyn還在常見版本的Microsoft Windows操作系統上進行了測試和驗證,包括Windows XP和Windows7。
開發語言的獨立性
目前,開發人員可以使用C++或Java語言來創建應用程序。其它語言的支持也將很快面世。
物理網絡和協議的獨立性
現在,網絡設備支持許多的通信技術。AllJoyn提供了一個抽象層,它為底層網絡協議棧定義了統一的接口,使得軟件工程師可以相對容易地添加和安裝新的網絡。
最近,Wi-Fi聯盟發布了一個Wi-Fi Direct規范,這將允許點對點的Wi-Fi連接。并且Wi-Fi Direct的網絡硬件模塊也正在積極開發中,它將為AllJoyn開發者增加Wi-Fi Direct功能和可用網絡選項的預關聯發現機制。
動態配置
通常情況下,移動設備在使用過程中會到達不同的地點,并不斷與各種網絡進行連接和斷開。這意味著它的IP(互聯網協議)地址可能會改變,網絡接口可能無法使用,服務可能是短暫性的。
AllJoyn可以獲知當前服務的斷開和新服務的出現,并創建新的連接(如果需要)。AllJoyn準備作為Wi-Fi Hotspot 2.0技術的應用層,這種技術旨在提升手機和信號發射塔對Wi-Fi熱點的漫游透明度。
有些情況下,網絡拓撲結構對分布式應用程序的性能至關重要。藍牙網絡配置成微微網會比配置成分布式網絡達到更好的性能。AllJoyn在內部對這些配置進行管理,而不需要開發人員對每種網絡技術的具體特性進行任何了解。
廣播和發現服務
當設備需要交互時,必須進行某種形式的廣播和發現服務。在靜態網絡的時代,人作為管理員對設備之間通信作出了精確的安排。最近,零配置網絡的概念已經得到了普及,尤其是蘋果的Bonjour和微軟的Plug and Play技術。我們也看到,現有技術的發現機制如藍牙服務發現協議,和新興機制如Wi-Fi Direct P2P發現規范。而AllJoyn提供了一種廣播和發現服務的抽象,可以簡化定位和應用服務的流程。
安全
分布式應用程序中安全性的固有模型是應用程序到應用程序的。不幸的是,在許多情況下,網絡安全模型并不匹配這種固有的協定。例如,藍牙協議就要求必須在設備之間進行配對。使用這種方法,一旦設備配對成功,兩個設備上的所有應用程序都會得到授權。但是當考慮更多比藍牙耳機更強大的設備時,這就不可取了。例如,兩臺筆記本電腦通過藍牙進行連接,那么更精細的安全控制是非常有必要的。AllJoyn在設計上對這種復雜的安全模型提供了廣泛的支持,特別是應用程序到應用程序的通信。
對象模型和遠程方法調用
AllJoyn采用了一種易于理解的對象模型和遠程方法調用(RMI)機制。AllJoyn重新實現了總線協議,基于D-BUS規范和擴展D-BUS協議,以支持分布式設備。
軟件組件
根據標準的對象模型和總線協議可以規范各種接口組件。Java接口聲明提供的一個與本地實現實例進行交互的規范,也采用了大致相同的方式。AllJoyn對象模型中提供了一個獨立于語言的規范,來實現遠程交互。
規范中考慮了多種接口的實現,從而可以支持應用程序通信的標準定義。這對于軟件組件是可以實現的技術。軟件組件已經成為了許多現代系統的核心部分,例如Android系統,它定義了四個主要的組件類型作為與Android應用框架進行交互的唯一渠道;或者在微軟系統中,它使用了組件對象模型(COM)系統的子節點。
我們期待出現豐富的接口定義,以實現概述一節中描述的情景。AllJoyn項目希望與用戶進行合作,共同定義和公布標準接口支持,并實現共享。
?
總結
以上是生活随笔為你收集整理的【Alljoyn】Alljoyn学习笔记五 AllJoyn开源技术基础概念解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android平台】Alljoyn学习
- 下一篇: 【Alljoyn】 Alljoyn学习笔