本报文格式不能处理粘包问题,因为处理粘包问题的成本太高,会极大的降低服务端的处理效率以及增加内存消耗,如果传输速度很高,建议使用UDP,UDP传输速度快,并且应用层做响应,增加重传机制可以有效的保证数据的可靠性,目前我做的RTU升级等功能都是使用UDP完成,服务器端开销小,并且不会粘包。
通讯建议:不要做什么握手机制,直接发送数据,服务器收到了就响应,收到响应后就结束通讯,握手增加耗电又增加流量消耗,并且在GPRS通讯上是非常浪费资源的,本来网络就不可靠,直接发送数据,服务器收到了就响应通讯就结束了,如果弄成握手方式,就是发送请求,握手成功,发送数据,等待响应,结束通讯,就增加了1个来回,特别是之前用过MQTT多了几个来回,太浪费通讯资源了。
使用HEX格式的通讯协议非常高效,不管是发送打包还是接收拆包,1个结构体就能搞定,无需一个字节一个字节解析,如果用字符串json方式,使用单片机作为客户端就很为难了,一般内存不会很多,并且解析json需要的内存会非常多。
报文全部使用小端模式,便于C语言处理。
注:由于我之前做了一个支持10W个设备的数据解析软件,其实占用的内存非常少,并且对CPU消耗很低,我们使用了一个很低端的服务器就能做到每秒1K条以上的数据处理,并且每条数据都在1秒内得到响应,刚开始的时候还好,后面因为设备越来越多,导致服务器搜索设备变得很漫长(我的设备数据都是放到内存中,使用了一个指针数组进行管理),由于设备会动态的增加,不能对序列号进行排序,因此查找设备的索引时间将会不可控,解析一条数据非常快,存储是异步的,有1W条的缓存,但是唯独查找设备这个看似简单的过程变得非常复杂,由于之前的协议我没