一、MINA框架简介
Apache MINA(Multipurpose Infrastructure for Network Applications) 是用于开发高性能和高可用性的网络应用程序的基础框架,它对Java中的socket和NIO进行了有效和清晰的封装,方便开发人员开发TCP/UDP程序,从而抛开在使用原始的socket时需要考虑的各种繁杂而又烦人问题(线程、性能、会话等),把更多精力专著在应用中的业务逻辑的开发上。
二、MINA框架的常用类:
IoAccepter 相当于服务器端
IoConnector 相当于客户端
IoSession 当前客户端到服务器端的一个连接实例
IoHandler 业务处理逻辑
IoFilter 过滤器用于悬接通讯层接口与业务层接口
三、范例源代码
下面的介绍以 Apache MINA 1.1.7 为例,需要JDK 5.0以上版本,还需要slf4j的jar包。
1、服务器端主类源代码
public class Server {
public static final int PORT = 8080;
public static void main(String[] args) {
try{
IoAcceptor acceptor = new SocketAcceptor();
SocketAcceptorConfig config = new SocketAcceptorConfig();
config.setReuseAddress(true);
//使用字符串编码
//config.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
config.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
//config.getFilterChain().addLast("logger", new LoggingFilter());
//启动HelloServer
acceptor.bind(new InetSocketAddress(PORT), new ServerSessionHandler(acceptor), config);
System.out.println("Server started on port " + PORT);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
2、服务端业务处理逻辑类源代码
public class ServerSessionHandler extends IoHandlerAdapter {
private IoAcceptor acceptor;
public ServerSessionHandler(IoAcceptor acceptor){
this.acceptor = acceptor;
}
/**
* 有新连接时触发
*/
public void sessionOpened(IoSession session) throws Exception {
session.setIdleTime(IdleStatus.BOTH_IDLE, 60); //session可允许空闲的最大秒数
//session.setAttribute("times", new Integer(0)); //设置session属性值
Set set = acceptor.getManagedSessions(new InetSocketAddress(Server.PORT));
long count = 0;
if(set!=null) count = set.size();
System.out.println("受管理的连接数:" + count);
}
/**
* 收到消息时触发
*/
public void messageReceived(IoSession session, Object message)throws Exception {
Message msg = (Message)message;
msg.setMsgBody("in server side: " + msg.getMsgBody());
session.write(msg);
}
/**
* session超过最大允许空闲时间时触发
*/
public void sessionIdle(IoSession session, IdleStatus status)throws Exception {
System.out.println("Disconnecting the idle");
session.close();
}
/**
* 连接关闭时触发
*/
public void sessionClosed(IoSession session) throws Exception {
System.out.println("session closed from " + session.getRemoteAddress());
Set set = acceptor.getManagedSessions(new InetSocketAddress(Server.PORT));
long count = 0;
if(set!=null) count = set.size();
System.out.println("受管理的连接数:" + count);
}
/**
* 异常发生时触发
*/
public void exceptionCaught(IoSession session, Throwable cause)throws Exception {
cause.printStackTrace();
session.close();
}
}
3、客户端主类源代码
public class Client {
private static final String HOSTNAME = "localhost";
private static final int PORT = 8080;
private static final int CONNECT_TIMEOUT = 30; //seconds
public void sendMessage(String msg){
SocketConnector connector = new SocketConnector();
SocketConnectorConfig config = new SocketConnectorConfig();
config.setConnectTimeout(CONNECT_TIMEOUT);
config.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
//config.getFilterChain().addLast("logger", new LoggingFilter());
Message message = new Message(1, msg);
connector.connect(new InetSocketAddress(HOSTNAME, PORT), new ClientSessionHandler(message), config);
}
public static void main(String[] args) {
for(int i=1;i<=5;i++){
Client client = new Client();
client.sendMessage("cjm_" + i);
}
}
}
4、客户端业务逻辑处理类源代码
public class ClientSessionHandler extends IoHandlerAdapter {
private Object msg;
public ClientSessionHandler(Object msg){
this.msg = msg;
}
public void sessionOpened(IoSession session) throws Exception {
session.write(this.msg);
}
public void messageReceived(IoSession session, Object message)throws Exception {
Message rm = (Message) message;
System.out.println("message is: " + rm.getMsgBody());
//session.write(rm);
//session.close();
}
public void sessionClosed(IoSession session) throws Exception {
System.out.println("session closed from Client");
}
public void exceptionCaught(IoSession session, Throwable cause)throws Exception {
session.close();
}
}
5、Message类源代码
public class Message implements Serializable{
private static final long serialVersionUID = 1L;
private int type;
private String msgBody;
public Message(int type, String msgBody){
this.type = type;
this.msgBody = msgBody;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getMsgBody() {
return msgBody;
}
public void setMsgBody(String msgBody) {
this.msgBody = msgBody;
}
}
分享到:
相关推荐
Apache Mina 框架是一个强大的网络通信框架,它的核心目标是简化开发高效且可扩展的网络应用程序。Mina 提供了基于事件驱动和异步IO的编程模型,特别是利用了Java NIO作为其默认的底层支持,这使得开发者能够构建高...
Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...
Mina框架是一个基于Java的网络通信应用框架,它为高性能、高可用性的网络应用程序提供了强大的支持。本教程将深入探讨Mina框架的入门与开发,帮助你快速掌握这个框架的关键概念和技术。 首先,理解Mina的核心概念至...
Apache Mina 框架是一个强大的网络通信应用框架,它主要针对基于TCP/IP和UDP/IP的协议栈,同时也支持Java对象序列化和其他通信方式。Mina 的核心设计目标是帮助开发者快速构建高性能、高可扩展性的网络应用。它采用...
虽然MiNA框架的入门相对简单,但要充分利用其强大功能,还需要进一步了解以下概念: - **线程模型**:MiNA框架支持多种线程模型,如Proactor、Selector等,不同的线程模型会影响应用程序的性能和资源使用情况。 - *...
Mina框架是一个强大的网络应用开发框架,主要用于构建高性能、高可用性的网络服务器。在Java世界里,Mina因其异步事件驱动模型而受到广泛的青睐,它简化了TCP/IP和UDP协议编程,使得开发者可以专注于业务逻辑,而...
Mina框架,全称为Apache Mina,是一款基于Java开发的网络通信应用框架,它提供了一种简单而高性能的方式来构建网络服务,尤其在处理TCP/IP、UDP/IP以及SSL/TLS协议方面表现卓越。本资源包包含了实现Mina框架基础功能...
Mina框架是一个高性能、异步事件驱动的网络应用程序框架,主要用Java语言编写,用于简化开发TCP、UDP和SSL/TLS协议服务器和客户端的过程。它广泛应用于构建网络服务,如FTP、SMTP、NNTP等协议的服务器,以及任何基于...
《Mina通信框架应用详解》 Mina通信框架,全称为Apache MINA,是一个高度可扩展的、基于Java的网络应用程序开发框架。MINA的名字来源于多语言(Multi-purpose Infrastructure for Network Applications),它提供了...
Java Mina框架是一款高度可扩展且高性能的网络应用开发框架,专为开发网络服务和协议处理应用程序而设计。它提供了一种简洁、高效的API,使得开发者可以轻松地创建基于TCP/IP和UDP/IP协议的服务器和客户端应用。Mina...
Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,主要用在开发网络通信应用,如TCP/IP和UDP/IP协议的服务器和客户端。这个框架允许开发者以一种简单、高效的方式处理I/O操作,同时提供了丰富的功能,如多...
mina 框架使用总结 mina 框架是对 Java 的 NIO 包的一个封装,简化了 NIO 程序开发的难度,封装了很多底层的细节...MINA 框架是一个功能强大、灵活、可扩展的网络应用程序开发框架,对于开发网络应用程序非常有帮助。
Mina框架是一个高性能、事件驱动的网络应用框架,主要用于简化Java网络编程,特别是TCP和UDP协议的处理。它被广泛应用于开发服务器端应用,如FTP、SMTP、HTTP等协议的服务,以及任何基于TCP或UDP协议的应用。Mina的...
apache mina 框架的学习文档,通过此文档可以基本了解mina框架。
4. **MINA和Spring整合**(MINA和spring整合.txt):Spring是一个广泛使用的Java应用框架,而MINA与Spring的整合使得开发者可以利用Spring的依赖注入和管理功能来简化MINA应用的开发。这份文档可能详细阐述了如何在...
Mina(Multithreaded Internet Network Application)框架是由Apache软件基金会提供的一个高性能、可伸缩的网络编程框架,它主要应用于Java NIO环境下的网络通信开发。Mina通过采用多线程模型和异步I/O技术来提高...
MINA(Java Mini Asynchronous Network Application Framework)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发服务器和客户端的网络应用,特别是TCP和UDP协议的应用。MINA为开发者提供了高度抽象...
Mina框架是一个高度可扩展的网络通信应用框架,广泛应用于开发高性能、高效率的服务端应用,如TCP/IP、UDP以及HTTP等协议的服务器。它提供了一种事件驱动、异步处理的编程模型,使得开发者能够专注于业务逻辑,而...