之前也做了物联网项目,当时设备与硬件之间的通信模式是直连的方式,设备通过tcp连接到服务器,然后实现直接的通信。其中医疗耗材柜通过tcp自定义协议通信,打印机通过websocket通信。
最近接触的这个新物联网项目在服务端与设备端之间增加了一层中间件,使用物联网标准通信协议mqtt通信,所有要发给对方的消息必须先发布到mqtt服务器的某个主题,然后接收方需要订阅这个主题才能接收到消息。
就整体架构来说比之前直连的模式要复杂,好处是服务端与设备端解耦了,而且服务端不需要管理与客户端的连接通道,向客户端发消息不再困难。
而且最近研究retained消息意外发现了之前一个问题更好的解决方案。
之前直连模式,有一个服务端主动发送消息给客户端的场景,当服务端新增一个用户指纹的时候,需要同步给所有医疗耗材柜,这个时候如果某个设备不在线就会导致那个设备收取不到新用户的指纹,需要做另外的补发措施。
现在这个问题使用retained消息就能很好的解决了。retained消息会保留在mqtt服务器,当设备上线连接到mqtt服务器后,会收取到retained消息,这样即使操作发生的时候设备不在线,也不用担心丢失操作了。