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

上面是初次登陆,下面是重新登录,目前情况是初次登陆没有什么问题,但是重新登录的时候会服务器断开客户端连接,然后打断点也很正常的执行完成上面重新登录代码,然后就会莫名其妙的被断开连接,然后导致客户端直接被断开,都无法发送心跳
二·问题原因
在player结构体被init的时候
会初始化一个定时任务去检查这个player的状态,
这个方法会检测这个player的ping pong时间然后去核验时间然后去停止客户端连接超过5s就会去主动停止这个客户端连接
在客户端
连接建立后5s发送一次心跳给服务端
三·问题分析
我debug进程序发现它会在重新登录方法执行之后去调用了一个close client的方法,问题是这个方法是什么时候会触发呢,然后查找之后发现就是定时任务扫描会触发关闭连接,顺着这个可能性去查找问题,发现是在reLogin里面没有重置ping pong时间,然后扫描时候,就会查找上次的时间,发现了超时就会关闭当前连接,因为在relogin里面已经重置了连接信息
四·问题解决
在relogin里面加入了如下方法
,重置了ping pong时间然后再重新登录之后,心跳就可以正常发送了,解决了扫描问题
博客讲述了在开发Go服务端和Java客户端时遇到的重新登录导致连接断开的问题。问题源于服务端的定时任务检测客户端pingpong时间超时并关闭连接。在分析中发现,重新登录未重置pingpong时间,导致扫描时误判为超时。解决方案是在重新登录后正确重置pingpong时间,从而确保心跳能正常发送,避免了不必要的连接断开。
912

被折叠的 条评论
为什么被折叠?



