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心跳包机制是Apache Mina框架中的一个关键特性,它用于维持网络连接的活跃状态,确保数据能够在客户端和服务端之间顺畅地传输。Mina是一个高度可扩展的Java网络应用框架,广泛应用于各种分布式系统和网络服务,...
接下来,我们讨论"Mina心跳连接"。心跳机制是保持连接活性的重要手段,特别是在长连接中,防止因网络延迟或服务器无响应导致的假死状态。Mina允许开发者自定义心跳包,通过发送无数据的包或者包含特定标识的数据包,...
"Mina心跳"是指在MINA框架中实现的一种机制,用于确保网络连接的活跃性和数据传输的可靠性。心跳在分布式系统、网络通信和实时应用程序中扮演着关键角色,因为它们可以检测并处理网络延迟、断开连接或其它通信问题。...
mina仿qq聊天功能,自定义协议,协议的编码和解码详解,发送xml对象json,mina开发大全,详细api ...mina开发的在线聊天工具,mina仿qq功能,mina自定义协议,可以仿http请求,mina心跳等技术大全,mina功能大揭密
Mina支持多种协议,如TCP、UDP以及SSL/TLS加密,因此它非常适合用于构建如FTP服务器、HTTP服务器、数据库连接等。 Socket,又称套接字,是操作系统提供的一个编程接口,用于不同进程之间的网络通信。在Java中,`...
在Java世界中,Mina以其简洁的API和灵活性而受到青睐,尤其适用于处理大量的并发连接,如TCP/IP和UDP协议。在这个"Mina开发实例(服务端、客户端)DEMO"中,我们将深入探讨Mina如何实现长连接通讯。 首先,我们来...
**Mina入门:Mina版之HelloWorld** Apache Mina是一个开源...在深入学习Mina时,可以进一步研究它的高级特性,如线程模型、缓冲区管理、心跳机制等,这些都将有助于我们在实际项目中更好地利用Mina提供的强大功能。
3. **协议无关性**:Mina库允许开发者轻松实现自定义协议,只需关注业务逻辑,而无需关心底层网络细节。 4. **高性能**:经过优化的I/O处理和事件模型,使得Mina在处理大量并发连接时表现出色。 5. **稳定性**:...
MINA(Java Mini Asynchronous Network Application Framework)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发服务器和客户端的网络应用,特别是TCP和UDP协议的应用。MINA为开发者提供了高度抽象...
- **创建Mina配置类**:定义Mina服务器的配置,包括端口号、心跳间隔等。 - **实现Acceptor**:定义连接接收器,负责处理新进来的连接请求。 - **创建过滤器链**:Mina的过滤器机制允许我们在数据传输过程中进行...
8. **配置与优化**:MINA 提供了丰富的配置选项,如缓冲区大小、心跳间隔、超时设置等,用于优化网络性能。 9. **案例研究**:官方文档中可能会包含实际应用场景的示例代码,帮助开发者快速理解如何使用 MINA 构建...
在Java世界里,Mina因其异步事件驱动模型而受到广泛的青睐,它简化了TCP/IP和UDP协议编程,使得开发者可以专注于业务逻辑,而无需关心底层网络通信的细节。在这个"Mina框架使用demo"中,我们将深入探讨如何利用Mina...
MINA提供了一套完整的事件驱动、异步I/O的API,适用于TCP和UDP等不同协议的网络应用,如服务器端开发、分布式系统、物联网应用等。 在MINA中,核心概念包括Session、Filter和ProtocolDecoder/Encoder。Session代表...
文件`HeartBeat.java`定义了心跳协议的数据结构,可能包含一个简单的标识符或者序列号,以便服务器和客户端识别心跳包。在`HeartBeatServer.java`中,我们创建了一个服务器端的Mina服务,它监听特定的端口,等待...
Mina是一个轻量级、高性能的网络应用框架,主要用于构建服务器端的网络应用,如TCP/IP和UDP协议的服务。而SpringBoot是基于Spring框架的微服务开发工具,简化了Spring应用的初始搭建以及开发过程。下面我们将详细...
4. **连接管理**:Mina提供了丰富的会话管理功能,包括心跳检测、超时管理、会话属性等,以保持连接的稳定性和可靠性。 **源码学习:** 深入研究Mina的源码可以帮助我们理解其内部工作原理,如事件驱动模型的实现...
除了基础应用,MINA还支持更复杂的特性,如心跳检测、会话管理、多线程处理等。开发者可以根据需求进一步探索MINA的高级功能,如使用SSL/TLS进行加密通信,或者实现自定义的协议处理器。 总的来说,Mina通信框架...
Apache Mina是一个流行的Java框架,专门用于简化和优化网络应用开发,它支持多种协议如TCP/IP、UDP/IP等,并提供了长连接和短连接的支持。在这个实例中,我们将探讨如何使用Mina实现长连接和短连接。 首先,理解长...
MINA提供了异步的、事件驱动的网络通信API,简化了处理TCP/IP和UDP/IP协议栈的工作。在这个场景中,我们将讨论如何使用MINA来实现一个简单的登录功能。 首先,理解MINA的基本工作原理至关重要。MINA的核心是...