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:设备端、用户端的流程设计
客户端通过接口访问云平台,可以实现多种终端的实时监控,设备也可以将姿态记录到远程数据库。其系统架构如图所示:
- 设备与平台流程图
用户与平台流程图