go与java的心跳机制同步问题

博客讲述了在开发Go服务端和Java客户端时遇到的重新登录导致连接断开的问题。问题源于服务端的定时任务检测客户端pingpong时间超时并关闭连接。在分析中发现,重新登录未重置pingpong时间,导致扫描时误判为超时。解决方案是在重新登录后正确重置pingpong时间,从而确保心跳能正常发送,避免了不必要的连接断开。

目录

一·出现情况

二·问题原因

三·问题分析

四·问题解决


一·出现情况

近期在写一个go的服务端并且做了一个java的客户端,目前在服务端有个重新登录的机制如下

上面是初次登陆,下面是重新登录,目前情况是初次登陆没有什么问题,但是重新登录的时候会服务器断开客户端连接,然后打断点也很正常的执行完成上面重新登录代码,然后就会莫名其妙的被断开连接,然后导致客户端直接被断开,都无法发送心跳

二·问题原因

在player结构体被init的时候会初始化一个定时任务去检查这个player的状态,

这个方法会检测这个player的ping pong时间然后去核验时间然后去停止客户端连接超过5s就会去主动停止这个客户端连接

在客户端连接建立后5s发送一次心跳给服务端

三·问题分析

我debug进程序发现它会在重新登录方法执行之后去调用了一个close client的方法,问题是这个方法是什么时候会触发呢,然后查找之后发现就是定时任务扫描会触发关闭连接,顺着这个可能性去查找问题,发现是在reLogin里面没有重置ping pong时间,然后扫描时候,就会查找上次的时间,发现了超时就会关闭当前连接,因为在relogin里面已经重置了连接信息

四·问题解决

在relogin里面加入了如下方法,重置了ping pong时间然后再重新登录之后,心跳就可以正常发送了,解决了扫描问题

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值