`

MINA 心跳协议

    博客分类:
  • NIO
 
阅读更多

    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的实现。。

 

附上自己测试的代码。

分享到:
评论
4 楼 moment52 2013-04-27  
心跳中返回null应该也可以保持心跳吧
3 楼 newcrazy 2013-03-28  
请问一个心跳包到达的时候isRequest和isResponse方法为什么会各自己执行两次?
2 楼 wei_jiyong 2012-09-04  
怎么你的测试代码不大好使啊!呵呵呵!
1 楼 tianlovv 2012-06-01  
翻译的不错,1.0版本还没有这个功能。作用是session idle之后还可以再尝试激活一次吧

相关推荐

    MINA 心跳协议Demo

    在标题“MINA 心跳协议Demo”中提到的“心跳协议”,在分布式系统和网络通信中是至关重要的一个概念。心跳协议主要用于确保连接的活跃性,检测并处理网络中断或长时间无数据交换导致的假死情况。MINA框架提供了心跳...

    mina心跳包机制

    mina心跳包机制是Apache Mina框架中的一个关键特性,它用于维持网络连接的活跃状态,确保数据能够在客户端和服务端之间顺畅地传输。Mina是一个高度可扩展的Java网络应用框架,广泛应用于各种分布式系统和网络服务,...

    mina连接 mina心跳连接 mina断线重连

    接下来,我们讨论"Mina心跳连接"。心跳机制是保持连接活性的重要手段,特别是在长连接中,防止因网络延迟或服务器无响应导致的假死状态。Mina允许开发者自定义心跳包,通过发送无数据的包或者包含特定标识的数据包,...

    mina 心跳

    "Mina心跳"是指在MINA框架中实现的一种机制,用于确保网络连接的活跃性和数据传输的可靠性。心跳在分布式系统、网络通信和实时应用程序中扮演着关键角色,因为它们可以检测并处理网络延迟、断开连接或其它通信问题。...

    mina仿qq聊天功能,自定义协议,协议的编码和解码详解,发送xml对象json,mina开发大全,详细api,mina心跳

    mina仿qq聊天功能,自定义协议,协议的编码和解码详解,发送xml对象json,mina开发大全,详细api ...mina开发的在线聊天工具,mina仿qq功能,mina自定义协议,可以仿http请求,mina心跳等技术大全,mina功能大揭密

    Mina+Socket通信

    Mina支持多种协议,如TCP、UDP以及SSL/TLS加密,因此它非常适合用于构建如FTP服务器、HTTP服务器、数据库连接等。 Socket,又称套接字,是操作系统提供的一个编程接口,用于不同进程之间的网络通信。在Java中,`...

    Mina开发实例(服务端、客户端)DEMO

    在Java世界中,Mina以其简洁的API和灵活性而受到青睐,尤其适用于处理大量的并发连接,如TCP/IP和UDP协议。在这个"Mina开发实例(服务端、客户端)DEMO"中,我们将深入探讨Mina如何实现长连接通讯。 首先,我们来...

    Mina入门:mina版之HelloWorld

    **Mina入门:Mina版之HelloWorld** Apache Mina是一个开源...在深入学习Mina时,可以进一步研究它的高级特性,如线程模型、缓冲区管理、心跳机制等,这些都将有助于我们在实际项目中更好地利用Mina提供的强大功能。

    Android-MinaSocket一款基于Mina的Socket长连接库

    3. **协议无关性**:Mina库允许开发者轻松实现自定义协议,只需关注业务逻辑,而无需关心底层网络细节。 4. **高性能**:经过优化的I/O处理和事件模型,使得Mina在处理大量并发连接时表现出色。 5. **稳定性**:...

    MINA长连接框架实现通讯

    MINA(Java Mini Asynchronous Network Application Framework)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发服务器和客户端的网络应用,特别是TCP和UDP协议的应用。MINA为开发者提供了高度抽象...

    springboot 深度整合mina开箱即用

    - **创建Mina配置类**:定义Mina服务器的配置,包括端口号、心跳间隔等。 - **实现Acceptor**:定义连接接收器,负责处理新进来的连接请求。 - **创建过滤器链**:Mina的过滤器机制允许我们在数据传输过程中进行...

    mina2.0 英文版 中文版 官方文档

    8. **配置与优化**:MINA 提供了丰富的配置选项,如缓冲区大小、心跳间隔、超时设置等,用于优化网络性能。 9. **案例研究**:官方文档中可能会包含实际应用场景的示例代码,帮助开发者快速理解如何使用 MINA 构建...

    Mina框架使用demo

    在Java世界里,Mina因其异步事件驱动模型而受到广泛的青睐,它简化了TCP/IP和UDP协议编程,使得开发者可以专注于业务逻辑,而无需关心底层网络通信的细节。在这个"Mina框架使用demo"中,我们将深入探讨如何利用Mina...

    MINA中文官方教程

    MINA提供了一套完整的事件驱动、异步I/O的API,适用于TCP和UDP等不同协议的网络应用,如服务器端开发、分布式系统、物联网应用等。 在MINA中,核心概念包括Session、Filter和ProtocolDecoder/Encoder。Session代表...

    Mina 框架源码解析-构建简单通信程序

    文件`HeartBeat.java`定义了心跳协议的数据结构,可能包含一个简单的标识符或者序列号,以便服务器和客户端识别心跳包。在`HeartBeatServer.java`中,我们创建了一个服务器端的Mina服务,它监听特定的端口,等待...

    springboot整合mina

    Mina是一个轻量级、高性能的网络应用框架,主要用于构建服务器端的网络应用,如TCP/IP和UDP协议的服务。而SpringBoot是基于Spring框架的微服务开发工具,简化了Spring应用的初始搭建以及开发过程。下面我们将详细...

    mina框架源码及jar包

    4. **连接管理**:Mina提供了丰富的会话管理功能,包括心跳检测、超时管理、会话属性等,以保持连接的稳定性和可靠性。 **源码学习:** 深入研究Mina的源码可以帮助我们理解其内部工作原理,如事件驱动模型的实现...

    Mina通信框架应用示例

    除了基础应用,MINA还支持更复杂的特性,如心跳检测、会话管理、多线程处理等。开发者可以根据需求进一步探索MINA的高级功能,如使用SSL/TLS进行加密通信,或者实现自定义的协议处理器。 总的来说,Mina通信框架...

    Mina实现长连接和短连接实例

    Apache Mina是一个流行的Java框架,专门用于简化和优化网络应用开发,它支持多种协议如TCP/IP、UDP/IP等,并提供了长连接和短连接的支持。在这个实例中,我们将探讨如何使用Mina实现长连接和短连接。 首先,理解长...

    mina实现登录功能

    MINA提供了异步的、事件驱动的网络通信API,简化了处理TCP/IP和UDP/IP协议栈的工作。在这个场景中,我们将讨论如何使用MINA来实现一个简单的登录功能。 首先,理解MINA的基本工作原理至关重要。MINA的核心是...

Global site tag (gtag.js) - Google Analytics