在filter包下有个原生态支持,只需实现接口KeepAliveMessageFactory即可。
但是还是有些不算问题的问题,比如在运行时手动设置空闲时间限制,那么会和KeepAliveFilter相互干扰。
例子和源码相对简单,这里贴一个毫无意义的实现,以作参考。
public class KeepAliveTestServer {
public static void main(String[] args) throws IOException {
IoAcceptor acceptor = new NioSocketAcceptor();
KeepAliveFilter keepAliveFilter = new KeepAliveFilter(new KeepAliveMessageImpl());
keepAliveFilter.setForwardEvent(false);
keepAliveFilter.setRequestInterval(30);
keepAliveFilter.setRequestTimeout(10);
keepAliveFilter.setRequestTimeoutHandler(new KeepAliveRequestTimeoutHandler() {
public void keepAliveRequestTimedOut(KeepAliveFilter filter, IoSession session) throws Exception {
System.out.println("连接已无响应...关闭session鸟。KeepAliveRequestTimeoutHandler.CLOSE 和我作用一样,默认就是这个");
session.close(true);
}
});
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));
acceptor.getFilterChain().addLast("KeepAlive", keepAliveFilter);
acceptor.getFilterChain().addLast("log", new LoggingFilter());
acceptor.setHandler(new IoHandlerAdapter());
acceptor.bind(new InetSocketAddress(13665));
}
static class KeepAliveMessageImpl implements KeepAliveMessageFactory {
private static final String KAMSG_REQ = "###$$$";
private static final String KAMSG_REP = "$$$###";
public Object getRequest(IoSession session) {
return KAMSG_REQ;
}
public Object getResponse(IoSession session, Object request) {
return KAMSG_REP;
}
public boolean isRequest(IoSession session, Object message) {
return KAMSG_REQ.equals(message);
}
public boolean isResponse(IoSession session, Object message) {
return KAMSG_REP.equals(message);
}
}
}
分享到:
相关推荐
mina心跳包机制是Apache Mina框架中的一个关键特性,它用于维持网络连接的活跃状态,确保数据能够在客户端和服务端之间顺畅地传输。Mina是一个高度可扩展的Java网络应用框架,广泛应用于各种分布式系统和网络服务,...
3. **接收和处理心跳包**:当接收到心跳包时,接收方会确认收到,并根据设定的超时时间计算下一次心跳检测的时间。 4. **超时检测**:如果在预设的超时时间内没有接收到对方的心跳包,那么判断连接可能已经断开,...
Apache MINA 是一个开发高性能和高可伸缩性网络应用程序的网络应用框架。它提供了一个抽象的事件驱动的异步 API,可以使用 TCP/IP、UDP/IP、串口和虚拟机内部的管道等传输方式。Apache MINA 可以作为开发网络应用...
Mina允许开发者自定义心跳包,通过发送无数据的包或者包含特定标识的数据包,来检查网络连接是否正常。心跳通常由客户端或服务端定期发起,如果在预定时间内未收到回应,则判断为连接异常,并可能触发断线重连流程。...
MINA框架提供了心跳机制的内置支持,使得开发者可以轻松地在应用中集成这一功能。 在描述中,“使用MINA自带的心跳协议编写的心跳的Demo”表明这是一个演示如何在MINA中实现心跳检查的实际代码示例。通常,心跳协议...
在Android开发中,心跳包(Heartbeat Packet)是一种常见的网络通信机制,用于检测客户端与服务器之间的连接状态。当网络连接长时间无数据交换时,通过发送心跳包可以确保连接的活跃性,防止因网络延迟或断开导致的...
Filter是MINA中的一个重要组件,用于处理数据的编码和解码,以及对进来的网络事件进行拦截和处理。ProtocolDecoder负责将接收到的原始字节流解码为应用程序可以理解的数据对象,而ProtocolEncoder则负责将应用程序...
在本压缩包"apache-mina-2.0.4"中,包含的是Mina框架的源码和jar包,这为开发者深入理解Mina的工作机制以及自定义功能提供了便利。 **Mina框架的核心概念:** 1. **I/O模型**:Mina基于NIO(Non-blocking I/O)...
在实际项目中,可能还需要处理更复杂的场景,例如心跳检测、数据编码解码、异常处理等。Mina提供了丰富的过滤器和事件机制,可以方便地扩展和定制通信行为。而Socket则更底层,需要开发者自行处理这些细节。 文件...
- **心跳机制**:为了检测网络连接是否活跃,MINA支持心跳机制,确保数据传输的可靠性。 - **线程模型**:MINA允许自定义线程模型,如单线程、多线程或线程池,以适应不同的性能需求。 - **异常处理**:了解如何处理...
在这个"Mina例子包含与Spring整合"的项目中,我们将探讨如何将MINA与流行的Java企业级框架Spring进行集成。 1. **Apache MINA**:MINA是基于Java NIO(非阻塞I/O)的网络应用框架,用于构建高性能、跨平台的服务器...
4. **心跳机制**:MINA可以借助队列定期发送心跳包,检测客户端连接状态,及时发现并处理断连情况。 在`QueueDemo`这个示例中,可能包含了如何创建和使用队列来辅助MINA通信的代码。开发者可能通过编写MINA的Filter...
标题中提到的"Mina 2.0.19所需的11个jar包"是MINA项目的一个特定版本,2.0.19,所必需的依赖库。这些jar包是MINA正常运行的基础,包括核心库和其他相关支持库。9个MINA的jar包很可能包含以下组件: 1. `mina-core`:...
在`HeartBeatServer.java`中,我们创建了一个服务器端的Mina服务,它监听特定的端口,等待客户端的连接和心跳包的到来。`HeartBeatServerHandler.java`是处理服务器端事件的类,它实现了I/O事件处理器接口,如`...
这个压缩包中的jar包可能包含了Apache MINA的核心库和其他必要的依赖,如Netty、log4j等,它们是构建和运行MINA TCP服务端所必需的。在实际项目中,开发者需要将这些jar包添加到项目的类路径中,然后按照MINA的API和...
**Mina入门:Mina版之HelloWorld** Apache Mina是一个开源...在深入学习Mina时,可以进一步研究它的高级特性,如线程模型、缓冲区管理、心跳机制等,这些都将有助于我们在实际项目中更好地利用Mina提供的强大功能。
- **心跳机制**:为了检测连接是否断开,通常需要设置心跳包,定时发送和接收,防止连接因长时间无数据传输而被网络中间设备关闭。 - **线程安全**:在多线程环境下,需确保所有操作都是线程安全的,避免并发问题。...
Mina包是一个基于Java的网络通信框架,特别适用于开发高性能且稳定的TCP/IP和UDP/IP服务。...其强大的性能、易于扩展的架构以及对多种协议的支持,使其成为Java开发者在构建网络应用时的首选工具之一。
同时,心跳机制(Heartbeat)是长连接中常用的一种维持连接活跃的技术,通过定期发送心跳包来检测连接是否正常。 8. **性能优化**:MINA框架允许开发者进行各种性能优化,例如调整缓冲区大小、选择合适的编码/解码...
MINA提供了一套完整的心跳机制,通过发送心跳包来检测网络连接是否中断,从而及时发现并处理断线问题。你可以自定义心跳消息和心跳间隔,以适应不同场景的需求。同时,MINA还提供了异常处理机制,当网络异常发生时,...