NettyDemo
NettyDemo copied to clipboard
没有服务器响应超时的心跳
作者你好,非常感谢你的demo思路,我在运行过程中发现没有服务器对心跳响应超时的部分代码,我自己加了一下,代码如下,我设置了当IdleStateHandler的读写超时时间分别是10秒和5秒
然后在接收消息的地方对心跳消息进行过滤,代码如下
这样当我的手机出现网络连接超时,发送心跳之后在对应超时时间没有收到服务端的心跳回复时,会触发重新连接,整套流程我测了一下没有大的毛病;但是我发现,即使我的业务正常,即正常收到服务器回复的业务数据时(没有超过读超时时间),userEventTriggered的写超时被回调,发送了心跳数据给服务端,我不明白这是netty正常的工作流程,还是我哪里封装错了?还望作者给予指导,谢谢
感谢支持。你可以再看一下IdleStateHandler中的超时参数。在客户端IdleStateHandler中,设置了写超时5s,意思是客户端5s内没发送消息,会触发userEventTriggered函数,在这个函数中我发送心跳数据。与接收服务端数据没关系
感谢作者回复
另外,作者你的意思是,这个读超时跟写超时是分开的,不管服务器回复数据给客户端与否,这个写超时一样会被触发吗?我按你的这么写
我在测试时,5秒内我不停发送业务数据给服务端,WRITER_IDLE就不会被触发,但是当我客户端不停的收到服务端的数据时(此时客户端超过了5秒没有往服务端发业务数据),WRITER_IDLE就会被触发,发送心跳消息;我不理解的是,此时明明服务端都往客户端发数据了,我都收到了,为什么还会发心跳?作者方便加QQ么?这样沟通好累(262607095),还望不吝赐教
对的,服务端和客户端分开的。按照你的意思,你不想让客户端发心跳的话,可以不设置写超时,设置读超时,表示几秒没收到服务端的消息后,触发userEventTriggered函数
也可以 你客户端5s内0,有消息发给服务端,就不会触发userEventTriggered函数,这样明白了吗
恩 明白了,非常感谢,我在你代码的基础上加了个客户端获取消息超时的心跳,符合我业务的需求了,再次感谢大佬