閱讀634 返回首頁    go 阿裏雲 go 技術社區[雲棲]


【AllJoyn框架-06】關於基於AllJoyn的即插即用的進展總結

目前項目與即插即用有關,以alljoyn為底層支撐,以VS為開發環境,以Mongodb為數據庫而實現的。目前實現的功能有:

1、係統以多對一方式運行,多個客戶端,一個服務端

2、服務端可定期收集客戶端的描述信息,包括客戶端有哪些資源,在哪裏等等

3、當有設備加入或離開時,服務端可以立即了解到

4、描述信息以JSON格式寫入Mongodb數據庫,可供上層應用獲取利用

5、目前平台僅涉及PC和arduino due(arduino平台我暫未負責)


存在的問題有:

1、當多個地方開啟同名服務時,客戶隻識別其中一個,如何判斷?

2、隨著客戶端的增多,加入會話的時間會相應延長,怎樣解決?

3、當有2個或2個以上的客戶端啟動時,CPU占用率高達90%


目前成果圖文說明

1、準備階段

配置好mongodb數據庫,啟動mongo客戶端以方便觀察數據庫變化;準備好服務端與客戶端的執行文件及相應的配置xml文件;設置好boost和mongoclient動態庫路徑,運行時需要


2、啟動服務端程序和數據庫客戶端mongo


上圖表明連接數據庫成功,且正在等待接收客戶會話請求。服務名是:org.alljoyn.service.test



已經連上mongodb服務端


3、啟動第一個客戶端實例


由上圖可知客戶尋找服務成功,加入會話。接下來收到服務發送的命令,該命令要求客戶發送自己的描述信息,於是客戶開始發送描述信息,發完後繼續等待接收命令

客戶一啟動,服務端的反應是:


接受了客戶的連接請求。設備一加入,就立刻發送獲取描述信息命令。上圖顯示了兩次命令發送,所以收到了兩次描述信息,並將之寫入數據庫。目前此描述信息隻是模板,後期需要調整。這裏將信息以JSON格式打印出來以方便展示

此時我們可觀察數據庫是否有無添加。預先已經在service.xml文件中設置好數據庫名alljoyn,集合名為clientdesc,見下圖:


由圖可知描述信息已經寫入了數據庫。其中由於編碼問題,導致中文的亂碼。當然這不是重點,畢竟已經成功寫入了數據庫。此後關於此客戶的信息會定期由服務端發送命令麵更新。


4、啟動第二個客戶端實例

客戶反應如上,服務端也能立刻識別,見下圖:


立刻識別出了新增的客戶:XwpuCV6U.2,數據庫的數量從1變成了2.此時再查看數據庫:


已經多增加了一條記錄


5、斷開一個客戶端

比如隨便斷開一個客戶端,服務能否立刻感知到呢?可以


服務端檢測到有客戶退出。當然此時數據庫也少了一項


大概就是如此。當然,還有很多不足,可能最讓人困惑的是這東西能幹啥。用在PC上確實感覺不到,不過用在嵌入式終端上就會有它的好處了,目前還需繼續探討。

最後更新:2017-04-03 05:40:04

  上一篇:go 解決:Could not find debuginfo pkg for dependency package glibc-2.12-1.132.el6_5.3.i686
  下一篇:go 網站評論係統的開源插件的使用