前言
在上一篇Netty demo 中,了解了Netty中的客户端和服务端之间的通信。这篇则介绍Netty中的心跳。
之前在Mina 中心跳的使用是通过继承 KeepAliveMessageFactory 心跳工厂类而实现的。而在Netty中,提供IdleStateHandler 类,可以实现对三种心跳的检测,分别是readerIdleTime、writerIdleTime和allIdleTime。
三个的参数解释如下:
1)readerIdleTime:为读超时时间(即测试端一定时间内未接受到被测试端消息);
2)writerIdleTime:为写超时时间(即测试端一定时间内向被测试端发送消息)
3)allIdleTime:所有类型的超时时间;
所以在channelPipeline中加入IdleStateHandler,我们在handler中提示的是5秒读,所以我们服务端的配置的是:
|
|
因为服务端必须5秒接受一次心跳请求, 那么客户端的配置:
|
|
userEventTriggered是Netty 处理心跳超时事件,在IdleStateHandler设置超时时间,如果达到了,就会直接调用该方法。如果没有超时则不调用。我们重写该方法的话,就可以自行进行相关的业务逻辑处理了。
完整的代码如下:
服务端:
服务端与之前的demo相比没有什么变化。
服务端业务逻辑
业务逻辑这块,因为要重写userEventTriggered,所以继承ChannelInboundHandlerAdapter 。
服务端过滤器
这块增加了心跳的相关设置。
客户端
因为过滤器中没有使用DelimiterBasedFrameDecoder ,所以不必换行了。
客户端业务逻辑处理
简单的在userEventTriggered 做了下相应的逻辑处理。
客户端过滤器
几乎和服务端一致,除了心跳相关设置。
效果图:
服务端:
客户端
其它
本文只是个简单的心跳测试,所以在细节方面可能有所欠缺。 如有不妥,欢迎指出!
参考:http://blog.csdn.net/linuu/article/details/51404264
该项目我放在github上了,有兴趣的可以看看!https://github.com/xuwujing/Netty
版权声明:
作者:虚无境
博客园出处:http://www.cnblogs.com/xuwujing
CSDN出处:http://blog.csdn.net/qazwsxpcm
个人博客出处:http://www.panchengming.com
原创不易,转载请标明出处,谢谢!