MINA本身自带了对心跳协议的支持,可以对心跳做出细致的配置,昨天仔细研究了一下MINA的API文档,翻译了一下其中心跳的内容(翻译的不好请大家见谅),做了一个测试例子。和需要用到MINA此功能的同行一起探讨一下。
写道
这个IoFilter 对IoEventType. SESSION_IDLE状态发出保持连接的请求,同时发回保持连接请求的响应。
这个过滤器要和IoSessionConfig.setIdleTime(IdleStatus, int)方法配制使用
这
个过滤器会自动校正IdleStatus的idleTime。 (例如IdleStatus.READER_IDLE状态和
IdleStatus.WRITER_IDLE状态.)
改变IdleStatus的idleTime会让过滤器出现一些无法预计的行为。请注意任何IoFilter 和
IoHandler绑定了KeepAliveFilter后都不会得到任何的IoEventType.SESSION_IDLE响应,除非你调用
setForwardEvent(boolean)方法,传参true。
实现KeepAliveMessageFactory
如果要使用这个过滤器,你需要提供一些KeepAliveMessageFactory的实现:确定接收到,或者发出的都是心跳消息,或者重新构造一条新的信条消息。
Name
|
Description
|
Implementation
|
Active
活跃型
|
你希望当读取者空闲时发送心跳消息。一旦请求发出,对心跳的响应必须在keepAliveRequestTimeout seconds
的时间内.
接收。否则,指定的KeepAliveRequestTimeoutHandler
类会被调用。如果心跳请求被接收到,它的响应当然会被回复。
|
Both KeepAliveMessageFactory.getRequest(IoSession)
and
KeepAliveMessageFactory.getResponse(IoSession, Object)
must return a non-null.
|
Semi-active
半活跃型
|
你希望当读取者空闲时发送心跳消息。然而,你实质上并不在意它是否会得到响应。如果心跳请求被接收,同时他会把回应发回来。
|
Both KeepAliveMessageFactory.getRequest(IoSession)
and
KeepAliveMessageFactory.getResponse(IoSession, Object)
must return a non-null,
and the timeoutHandler property should be set to KeepAliveRequestTimeoutHandler.NOOP
, KeepAliveRequestTimeoutHandler.LOG
or
the custom KeepAliveRequestTimeoutHandler
implementation
that doesn't affect the session state nor throw an exception.
|
Passive
被动型
|
你并不想自己发送心跳请求,但是如果由心跳请求被接收到还是会发响应回去。
|
KeepAliveMessageFactory.getRequest(IoSession)
must return null and KeepAliveMessageFactory.getResponse(IoSession, Object)
must return a non-null.
|
Deaf Speaker
聋子型
|
当读取者空闲时你希望发出心跳请求,但是你并不希望得到任何反馈。
|
KeepAliveMessageFactory.getRequest(IoSession)
must return a non-null, KeepAliveMessageFactory.getResponse(IoSession, Object)
must return null and the timeoutHandler must be set to KeepAliveRequestTimeoutHandler.DEAF_SPEAKER
.
|
Silent Listener
沉默监听型
|
你不想发出心跳请求,同时你并不想收到任何回应。
|
Both KeepAliveMessageFactory.getRequest(IoSession)
and KeepAliveMessageFactory.getResponse(IoSession, Object)
must return null.
|
写道
请注意你务必正确实现
KeepAliveMessageFactory.isRequest(IoSession, Object) and
KeepAliveMessageFactory.isResponse(IoSession, Object)中任何一个你选择实现的方法.
Handling timeout处理超时
KeepAliveFilter
在没有收到心跳消息的响应时,会报告给的KeepAliveRequestTimeoutHandler。默认的处理是
KeepAliveRequestTimeoutHandler.CLOSE,但是你可以调整预设值
为:KeepAliveRequestTimeoutHandler.NOOP,
KeepAliveRequestTimeoutHandler.LOG或
KeepAliveRequestTimeoutHandler.EXCEPTION,你也可以实现个人的处理类。
特别的 handler: KeepAliveRequestTimeoutHandler.DEAF_SPEAKER
KeepAliveRequestTimeoutHandler.DEAF_SPEAKER
是一个特定的处理方法,专门应对于前面提及过的“deaf
speaker”模式。在设置KeepAliveRequestTimeoutHandler.DEAF_SPEAKER的timeoutHandler
时需要停止回应的过滤器,从此去除超时的侦测。
以上是MINA的 心跳包API,从文档中可以得知MINA的心跳主要是依赖KeepAliveMessageFactory,和KeepAliveRequestTimeoutHandler的实现。。
附上自己测试的代码。
分享到:
相关推荐
使用MINA自带的心跳协议编写的心跳的Demo
项目包含有mina的服务端与客户端,客户端发送心跳包,服务端响应心跳包
mina连接,mina心跳连接,mina断线重连。其中客户端可直接用在android上。根据各方参考资料,经过自己的理解弄出来的。CSDN的资源分太难得了。
mina 心跳
mina仿qq聊天功能,自定义协议,协议的编码和...mina聊天 mina解码编码 mina协议开发 mina仿qq mina消息xml mina开发的在线聊天工具,mina仿qq功能,mina自定义协议,可以仿http请求,mina心跳等技术大全,mina功能大揭密
公司需求,做的简单的Demo,可以拓展,Mina自定义协议简单实现,象征性得收取2积分
mina通信协议文档及实例,内含说明文档及实例,长短连接
Mina开源框架 心跳机制详解
mina 协议 解包 粘包
Mina自定义协议通信的示例
Apache MINA 是一个开发高性能和高可伸缩性网络应用程序的网络应用框架。它提供了一个抽象的事件驱动的异步 API,可以使用 TCP/IP、UDP/IP、串口和虚拟机内部的管道等传输方式。Apache MINA 可以作为开发网络应用...
NULL 博文链接:https://wchao226.iteye.com/blog/2246846
mina带心跳长链接,可实现服务间通信。socket长连接实现客户端与服务端的通信。对于通信技术学习是非常好的资料。改造后可实现企业应用
mina自定义编解码 不错的资源 ----其实不怎么样,技术就是拿出来共享的,开源。大家一起前进
详细介绍mina框架的各个组成部分、服务器端的开发、客户端开发。并根据本人在工程项目中使用的代码,详细讲解了服务器端是客户端实现。实现了json格式的通信、以及文件的上传于下载等功能。图文并茂,以开发者的角度...
服务器框架MINA使用经验总结 socket协议通信框架
NULL 博文链接:https://wen866595.iteye.com/blog/1154137
mina的使用初步入门mina的使用初步入门mina的使用初步入门
里面包含mina2.0的api(英文)和mina自学手册,还有mina的开发指导
mina-core-2.0.0-M6.jar mina-example-2.0.0-M6.jar mina-filter-codec-netty-2.0.0-M6.jar mina-filter-compression-2.0.0-M6.jar mina-integration-beans-2.0.0-M6.jar mina-integration-jmx-2.0.0-M6.jar mina-...