因为NB-IoT以UDP/CoAP为主,所以用Python socket和Twisted框架测试了一阵子。刚开始测试时,没有对接数据库和消息队列,即便是公网上传输UDP,似乎也很稳定。但是对接了MySQL/Redis之后,其稳定性便出现了变化。主要现象有:
- 服务器端发送了UDP报文后,设备端没有接收到,即报文丢失;
- 由于报文丢失后,设备端缺乏重传机制,所以一直在等待。
这就涉及到了协议的设计了。目前NB-IoT设备端主要用于周期性数据上传,或者事件触发导致的紧急上传。上传方向的接收比较稳定的,因为服务器的IP:port一直是稳定的。事件触发还可以采用重复发送,服务器端过滤的方式来实现。所以不需要下行确认。
让人操心的是下行方向。比如设备连接服务器必须要经过认证授权,有个状态的切换,这需要彼此确认,经过数据库操作后,下发Token给设备。增加了数据库操作的延时后,网络状态极有可能发生变化。所以必须要有个定时器来管理确认超时重发。
UDP对于收发双方来说几乎是对等的。但是设备端因为只有一个连接,也只需要一个定时器即可,而服务器端则需要一个机制来管理,对应多个设备的状态机。
网友评论