由于RS485是半双工通信,必须一发一收,发一个等待接收在处理。
也可能由于设备干扰或者gprs模块不稳定的问题,可能出现的问题是发出去的包,收不到的话我就需要重发。
比如onConnect时候,我发送一个命令,get_uid获取设备,等待返回数据,这时候需要等待onMessage返回处理数据,但是如果出现设备问题,我就无法接受数据无法在继续下一步工作了,请问使用workerman的什么机制处理比较好,主要实现的我发送的命令等待接收,如果超过10s接收不到,我再次重发,三次都收不到,我就断开了等待客户端重连。如果正常获取uid之后,之后的执行的机制也大体是这样的,workerman使用什么方案能够解决这个问题,谢谢。
tcp自带重发机制,并且保证数据包按顺序发给对端。
所以服务端通过相同的连接重发数据是没有意义的。
比如服务端通过同一个socket连接给设备发送了A1数据包,设备没收到,服务端又通过这个连接重新发了A2,后来又发了A3,如果A1收不到,那么后面重发的A2 和 A3肯定收不到。
这种情况主动权在客户端,客户端发起连接,发现一定时间没收到服务端的数据,可以选择断开重新连接服务端