在什么情况下服务端会出现接收到重复的数据?

scan_z

客户端 和 GatewayWorker 通讯给服务发了一条消息后立马断开,运行了几个月都正常稳定,突然一天出现了一条异常,客户端给服务端发了"1条"消息断开后,服务端同时收到了这1条消息2次,排除客户端重复发送的可能性,有没有其他原因造成了服务端“同一时间”收到了客户端发送的1条消息2次?

2264 1 0
1个回答

walkor

除非业务bug,没有其它可能性。

  • scan_z 2020-07-22

    大佬,发消息这个地方用了redis锁,key和客户端用户UID对应,15秒限制,每天上千万次请求,完美运行几个月都没出现过这种问题,所以基本可以把“客户端”重复发送这个可能性排除掉。

    服务端没有复杂的业务,就接消息记录了下,那么久就出现一次这种情况,同一时间接到同用户相同的消息2次,所以我觉得有点诡异,感觉问题出现在网络传输阶段,但是说出不出个理所当然来。

  • walkor 2020-07-22

    tcp机制会保证消息的一致性,传输过程中不会出现问题。

  • scan_z 2020-07-22

    @1:我们项目以前也遇到过这类“重复”数据情况,一个用户操作触发了接口2次(前端做了限制只允许1次),后面排查日志是同时触发的,正常使用不会有那么快手速,看了用户的网络环境是移动运营商,后面专门拿手机在信号不好的地方复现出来了,是运营商搞的鬼,用户请求一次,信号不好的情况下运营商网络可能会强制变成2次请求。

    因为客户端发消息是直接给一个外网IP发,我怀疑是不是又是客户端的运营商把客户的消息变成2次发过来了。

  • scan_z 2020-07-22

    @1:http://www.360doc.com/content/18/0424/13/11935121_748340867.shtml 有没有这个可能性?TCP无法过滤掉因网络延迟而造成二重复发

  • walkor 2020-07-22

    没有这个可能性

年代过于久远,无法发表回答
🔝