客户端 和 GatewayWorker 通讯给服务发了一条消息后立马断开,运行了几个月都正常稳定,突然一天出现了一条异常,客户端给服务端发了"1条"消息断开后,服务端同时收到了这1条消息2次,排除客户端重复发送的可能性,有没有其他原因造成了服务端“同一时间”收到了客户端发送的1条消息2次?
除非业务bug,没有其它可能性。
大佬,发消息这个地方用了redis锁,key和客户端用户UID对应,15秒限制,每天上千万次请求,完美运行几个月都没出现过这种问题,所以基本可以把“客户端”重复发送这个可能性排除掉。
服务端没有复杂的业务,就接消息记录了下,那么久就出现一次这种情况,同一时间接到同用户相同的消息2次,所以我觉得有点诡异,感觉问题出现在网络传输阶段,但是说出不出个理所当然来。
tcp机制会保证消息的一致性,传输过程中不会出现问题。
@1:我们项目以前也遇到过这类“重复”数据情况,一个用户操作触发了接口2次(前端做了限制只允许1次),后面排查日志是同时触发的,正常使用不会有那么快手速,看了用户的网络环境是移动运营商,后面专门拿手机在信号不好的地方复现出来了,是运营商搞的鬼,用户请求一次,信号不好的情况下运营商网络可能会强制变成2次请求。
因为客户端发消息是直接给一个外网IP发,我怀疑是不是又是客户端的运营商把客户的消息变成2次发过来了。
@1:http://www.360doc.com/content/18/0424/13/11935121_748340867.shtml 有没有这个可能性?TCP无法过滤掉因网络延迟而造成二重复发
没有这个可能性
除非业务bug,没有其它可能性。
大佬,发消息这个地方用了redis锁,key和客户端用户UID对应,15秒限制,每天上千万次请求,完美运行几个月都没出现过这种问题,所以基本可以把“客户端”重复发送这个可能性排除掉。
服务端没有复杂的业务,就接消息记录了下,那么久就出现一次这种情况,同一时间接到同用户相同的消息2次,所以我觉得有点诡异,感觉问题出现在网络传输阶段,但是说出不出个理所当然来。
tcp机制会保证消息的一致性,传输过程中不会出现问题。
@1:我们项目以前也遇到过这类“重复”数据情况,一个用户操作触发了接口2次(前端做了限制只允许1次),后面排查日志是同时触发的,正常使用不会有那么快手速,看了用户的网络环境是移动运营商,后面专门拿手机在信号不好的地方复现出来了,是运营商搞的鬼,用户请求一次,信号不好的情况下运营商网络可能会强制变成2次请求。
因为客户端发消息是直接给一个外网IP发,我怀疑是不是又是客户端的运营商把客户的消息变成2次发过来了。
@1:http://www.360doc.com/content/18/0424/13/11935121_748340867.shtml 有没有这个可能性?TCP无法过滤掉因网络延迟而造成二重复发
没有这个可能性