Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

没有服务器响应超时的心跳 #9

Open
Jeromeer opened this issue May 22, 2019 · 5 comments
Open

没有服务器响应超时的心跳 #9

Jeromeer opened this issue May 22, 2019 · 5 comments

Comments

@Jeromeer
Copy link

作者你好,非常感谢你的demo思路,我在运行过程中发现没有服务器对心跳响应超时的部分代码,我自己加了一下,代码如下,我设置了当IdleStateHandler的读写超时时间分别是10秒和5秒
image

然后在接收消息的地方对心跳消息进行过滤,代码如下
image
这样当我的手机出现网络连接超时,发送心跳之后在对应超时时间没有收到服务端的心跳回复时,会触发重新连接,整套流程我测了一下没有大的毛病;但是我发现,即使我的业务正常,即正常收到服务器回复的业务数据时(没有超过读超时时间),userEventTriggered的写超时被回调,发送了心跳数据给服务端,我不明白这是netty正常的工作流程,还是我哪里封装错了?还望作者给予指导,谢谢

@aLittleGreens
Copy link
Owner

感谢支持。你可以再看一下IdleStateHandler中的超时参数。在客户端IdleStateHandler中,设置了写超时5s,意思是客户端5s内没发送消息,会触发userEventTriggered函数,在这个函数中我发送心跳数据。与接收服务端数据没关系

@Jeromeer
Copy link
Author

感谢作者回复
另外,作者你的意思是,这个读超时跟写超时是分开的,不管服务器回复数据给客户端与否,这个写超时一样会被触发吗?我按你的这么写
image
我在测试时,5秒内我不停发送业务数据给服务端,WRITER_IDLE就不会被触发,但是当我客户端不停的收到服务端的数据时(此时客户端超过了5秒没有往服务端发业务数据),WRITER_IDLE就会被触发,发送心跳消息;我不理解的是,此时明明服务端都往客户端发数据了,我都收到了,为什么还会发心跳?作者方便加QQ么?这样沟通好累(262607095),还望不吝赐教

@aLittleGreens
Copy link
Owner

对的,服务端和客户端分开的。按照你的意思,你不想让客户端发心跳的话,可以不设置写超时,设置读超时,表示几秒没收到服务端的消息后,触发userEventTriggered函数

@aLittleGreens
Copy link
Owner

也可以 你客户端5s内0,有消息发给服务端,就不会触发userEventTriggered函数,这样明白了吗

@Jeromeer
Copy link
Author

恩 明白了,非常感谢,我在你代码的基础上加了个客户端获取消息超时的心跳,符合我业务的需求了,再次感谢大佬

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants