天天看點

【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

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

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

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

已經連上mongodb服務端

3、啟動第一個用戶端執行個體

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

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

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

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

接受了客戶的連接配接請求。裝置一加入,就立刻發送擷取描述資訊指令。上圖顯示了兩次指令發送,是以收到了兩次描述資訊,并将之寫入資料庫。目前此描述資訊隻是模闆,後期需要調整。這裡将資訊以json格式列印出來以友善展示

此時我們可觀察資料庫是否有無添加。預先已經在service.xml檔案中設定好資料庫名alljoyn,集合名為clientdesc,見下圖:

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

由圖可知描述資訊已經寫入了資料庫。其中由于編碼問題,導緻中文的亂碼。當然這不是重點,畢竟已經成功寫入了資料庫。此後關于此客戶的資訊會定期由服務端發送指令面更新。

4、啟動第二個用戶端執行個體

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

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

立刻識别出了新增的客戶:xwpucv6u.2,資料庫的數量從1變成了2.此時再檢視資料庫:

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

已經多增加了一條記錄

5、斷開一個用戶端

比如随便斷開一個用戶端,服務能否立刻感覺到呢?可以

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

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

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