这两年最火的是什么?物联网,现在连我家的电灯泡都是联网的。大量设备连网最考验的就是我们服务器的连接数量和保持情况。最近会陆续更新一系列的文章,使用Netty做IoT服务端的设计和技术讨论文章。
在Java界做socket开发最好的框架就是Netty,他本身是一个基于nio的封装,并解决了在Linux环境下nio的一些已知BUG。理想情况下前置程序应该只负责终端设备的连接保持和数据的转发,具体的业务交由后置程序来实现处理。
先来看一下我初步设计的程序架构图:
通许协议的设计主要从几个方面考虑:
为了解决第一问题,一般协议会考虑使用:
如果终端程序和服务端都是自行开发,推荐使用谷歌家的protobuf,Netty有良好的支持。如果双终端是第三方开发的为了降低联调难度推荐使用json。这次我们选择使用Json来进行设计我们的协议
业务 | 请求 | 应答 | 备注 |
---|---|---|---|
登录 | {“msgType”: 10, “devId”: “11010112345”, “version”:”1.0”, “txNo”: “1234567890123”, “sign”: “md5(devId+txNo+key)”} | {“msgType”: 11, “result”: 1, “txNo”: “1234567890123”} | 终端=>服务器 |
心跳 | {“msgType”: 20, “txNo”: “1234567890123”} | {“msgType”: 21, “txNo”: “1234567890123”} | 双向 |
控制 | {“msgType”: 30, “txNo”: “1234567890123”, “data”: “”} | {“msgType”: 31, “txNo”: “1234567890123”, “result”:””} | 服务器=>终端 |
数据上报 | {“msgType”: 40, “txNo”: “1234567890123”, “data”: “”} | {“msgType”: 41, “txNo”: “1234567890123”} | 终端=>服务器 |
注销 | {“msgType”: 50, “txNo”: “1234567890123” } | {“msgType”: 51, “txNo”: “1234567890123” } | 双向,主动断开链接 |
说明: