MINA框架中原生态心跳支持
来源:互联网 发布:滇红58淘宝 编辑:程序博客网 时间:2024/04/28 07:56
MINA本身自带了对心跳协议的支持,可以对心跳做出细致的配置,昨天仔细研究了一下MINA的API文档,翻译了一下其中心跳的内容(翻译的不好请大家见谅),做了一个测试例子。和需要用到MINA此功能的同行一起探讨一下。
这个过滤器要和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的实现:确定接收到,或者发出的都是心跳消息,或者重新构造一条新的信条消息。
NameDescriptionImplementation
Active
活跃型你希望当读取者空闲时发送心跳消息。一旦请求发出,对心跳的响应必须在keepAliveRequestTimeout seconds的时间内.接收。否则,指定的KeepAliveRequestTimeoutHandler 类会被调用。如果心跳请求被接收到,它的响应当然会被回复。BothKeepAliveMessageFactory.getRequest(IoSession)and
KeepAliveMessageFactory.getResponse(IoSession, Object)
must return a non-null.
Semi-active
半活跃型 你希望当读取者空闲时发送心跳消息。然而,你实质上并不在意它是否会得到响应。如果心跳请求被接收,同时他会把回应发回来。BothKeepAliveMessageFactory.getRequest(IoSession)and
KeepAliveMessageFactory.getResponse(IoSession, Object)
must return a non-null,
and the timeoutHandler property should be set toKeepAliveRequestTimeoutHandler.NOOP,KeepAliveRequestTimeoutHandler.LOG or
the custom KeepAliveRequestTimeoutHandlerimplementation
that doesn't affect the session state nor throw an exception.
Passive
被动型 你并不想自己发送心跳请求,但是如果由心跳请求被接收到还是会发响应回去。 KeepAliveMessageFactory.getRequest(IoSession)must return null andKeepAliveMessageFactory.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 toKeepAliveRequestTimeoutHandler.DEAF_SPEAKER.Silent Listener
沉默监听型 你不想发出心跳请求,同时你并不想收到任何回应。 BothKeepAliveMessageFactory.getRequest(IoSession)andKeepAliveMessageFactory.getResponse(IoSession, Object) must return null.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的实现。。
附上自己测试的代码。
http://download.csdn.net/detail/lzhang616/4378211
- MINA框架中原生态心跳支持
- Mina开源框架 心跳机制详解
- mina 服务端实现心跳
- MINA 心跳协议
- mina 服务端实现心跳
- mina 心跳机制
- MINA心跳协议
- mina 2 心跳包
- 【MINA】心跳机制
- MINA心跳协议
- mina 心跳机制
- mina心跳过滤器
- mina 心跳机制
- mina 添加心跳包
- SpringMVC中原生态的Servlet属性
- JAVA NIO异步通信框架MINA选型和使用的几个细节(概述入门,UDP, 心跳)
- JAVA NIO异步通信框架MINA选型和使用的几个细节(概述入门,UDP, 心跳)
- JAVA NIO异步通信框架MINA选型和使用的几个细节(概述入门,UDP, 心跳)
- apache访问/var/www之外的目录没权限的问题(万恶的SELinux)
- 数据结构笔记一 线性表
- js,javascript实现base64加密
- 深入理解char [] 和 char * ,const char[]和 const char*--反汇编分析
- linux命令大全
- MINA框架中原生态心跳支持
- jquery查找对应元素的form表单,并进行表单提交
- 实用的Ubuntu快捷键参考手册
- 转行与创业之路 (1)
- (转)编程高手与调试高手
- IE8的调试工具使用详解(下)
- 转 关于SetViewPortOrgEx与SetWindowOrgEx
- USACO Prime Palindromes
- html中form中表单元素特性