SmartBed2.0的上位機部分(草稿)
一、整體框架
更新:2016-10-29
更新:2016-11-9 通信協議
更新:2016-11-17 通信協議補充
更新:用戶端和設備端具體業務流程
- 業務邏輯
簡單來說,主要實現一個可以監控護理牀姿態的上位機軟件。SmartBed1.0版本開發了一款安卓APP,已經實現了局域網內的通信,通過TCP與設備透傳,實現指令和反饋的傳輸。
並且通過workerman框架初步實現了遠程傳輸。但是指令只是通過服務器簡單的轉發,沒有實現後端管理系統的開發。
後面的任務就是實現基於雲平臺管理的SmartBed2.0
遠程模式
多種控制終端
- 時序圖
二、升級功能(草稿)
(一)設備端
- 開機需要給服務器發送唯一PID標識以便於匹配
- 需要發送設備狀態信息,狀態的實時更新
- 指令結構
(二)服務器端
- 服務器將作爲遠程模式下整個框架的中心
- 服務器邏輯改變
- 服務器需要添加數據庫
(三)用戶端
- 佈局框架
- 通信框架
- 個人信息
- 授權
三、需要解決點(草稿)
- 通信協議
- 服務器編寫
- 安卓界面
。。。。
進度1:通信協議
協議的作用
由於TCP是基於流的,服務端應該檢查數據是否是完整的,因爲可能只是一個請求的部分數據到達服務端,甚至可能是多個請求連在一起到達服務端。如何判斷請求是否全部到達或者從多個連在一起的請求中分離請求,就需要規定一套通訊協議。
- 分包問題
- 粘包問題
參考:
自定義通信協議
基於TCP socket下自定義應用層通訊協議。協議格式:
- 區分數據邊界的標識
- 數據格式定義
Workerman支持的協議
- HTTP協議
- websocket協議
- text協議
- frame協議
- ws協議
前端支持的協議(草圖)
協議類型 | 移動端 | Web端(瀏覽器) | 設備端 |
---|---|---|---|
http協議 | √ | √ | √ |
WebSocket協議 | √ | √(部分) | |
自定義協議(text協議) | √ | √ |
各協議詳解
- socket
深入淺出講解:php的socket通信
- http
HTTP協議詳解(真的很經典)
- Text
分數據邊界的標識爲換行符”\n”(注意請求數據本身內部不能包含換行符),
數據格式爲Json
總結
- 方案一:採用Text自定義協議
- 好處:協議統一
- 弊端:上位機部分需要解析實現自定義通信協議,不穩定。
- 協議一採用websocket協議,協議二採用text協議
- 好處:支持長連接,有websocket庫
- 弊端:服務器需要支持多協議通信
- 方案三:採用http協議
- 好處:協議統一
- 弊端:Request = Response , 在HTTP中一個request只能有一個
response。而且這個response也是被動的,不能主動發起。
進度1.1:補充協議
以上是從workerman所支持的通信協議的角度對協議的思考。下面將從物聯網通信協議的角度出發:
- 物聯網協議比較 MQTT CoAP RESTful/HTTP XMPP(備份)
mqtt協議
MQTT是IBM開發的一個即時通訊協議。MQTT是面向M2M和物聯網的連接協議,採用輕量級發佈和訂閱消息傳輸機制。Mosquitto是一款實現了 MQTT v3.1 協議的開源消息代理軟件,提供輕量級的,支持發佈/訂閱的的消息推送模式,使設備對設備之間的短消息通信簡單易用。
- 輕量級的 machine-to-machine 通信協議。
- publish/subscribe模式。
- 基於TCP/IP。
- 支持QoS。
- 適合於低帶寬、不可靠連接、嵌入式設備、CPU內存資源緊張。
- 是一種比較不錯的Android消息推送方案。
- MQTT有可能成爲物聯網的重要協議。
參考:
例子:
總結:
- 下位機需要實現mqtt通信協議
- workerman沒有對應的mqtt服務,需要使用Mosquitto
局域網模式下通信過於複雜
進度1.2:協議測試
websocket協議在安卓下測試
text協議在安卓下測試
進度2:設備端、用戶端的流程設計
客戶端通過接口訪問雲平臺,可以實現多種終端的實時監控,設備也可以將姿態記錄到遠程數據庫。其系統架構如圖所示:
- 設備與平臺流程圖
用戶與平臺流程圖