`
raymond.chen
  • 浏览: 1437017 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MINA框架应用入门范例

阅读更多

一、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;
	}
}

 

8
2
分享到:
评论

相关推荐

    Mina框架入门介绍

    Apache Mina 框架是一个强大的网络通信框架,它的核心目标是简化开发高效且可扩展的网络应用程序。Mina 提供了基于事件驱动和异步IO的编程模型,特别是利用了Java NIO作为其默认的底层支持,这使得开发者能够构建高...

    Java springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    Java SpringBoot 整合Mina框架,涉及到的核心技术主要包括Java NIO(非阻塞I/O)、Mina框架以及SpringBoot的集成应用。本教程旨在帮助开发者深入理解和掌握这些技术,并提供了一个可直接使用的基础平台框架。 Java ...

    mina框架的demo 入门,开发

    Mina框架是一个基于Java的网络通信应用框架,它为高性能、高可用性的网络应用程序提供了强大的支持。本教程将深入探讨Mina框架的入门与开发,帮助你快速掌握这个框架的关键概念和技术。 首先,理解Mina的核心概念至...

    Apache mina框架入门教程

    Apache Mina 框架是一个强大的网络通信应用框架,它主要针对基于TCP/IP和UDP/IP的协议栈,同时也支持Java对象序列化和其他通信方式。Mina 的核心设计目标是帮助开发者快速构建高性能、高可扩展性的网络应用。它采用...

    MiNA框架新人指导

    虽然MiNA框架的入门相对简单,但要充分利用其强大功能,还需要进一步了解以下概念: - **线程模型**:MiNA框架支持多种线程模型,如Proactor、Selector等,不同的线程模型会影响应用程序的性能和资源使用情况。 - *...

    Mina框架使用demo

    Mina框架是一个强大的网络应用开发框架,主要用于构建高性能、高可用性的网络服务器。在Java世界里,Mina因其异步事件驱动模型而受到广泛的青睐,它简化了TCP/IP和UDP协议编程,使得开发者可以专注于业务逻辑,而...

    mina框架资源包

    Mina框架,全称为Apache Mina,是一款基于Java开发的网络通信应用框架,它提供了一种简单而高性能的方式来构建网络服务,尤其在处理TCP/IP、UDP/IP以及SSL/TLS协议方面表现卓越。本资源包包含了实现Mina框架基础功能...

    Mina框架+常用JAR包

    Mina框架是一个高性能、异步事件驱动的网络应用程序框架,主要用Java语言编写,用于简化开发TCP、UDP和SSL/TLS协议服务器和客户端的过程。它广泛应用于构建网络服务,如FTP、SMTP、NNTP等协议的服务器,以及任何基于...

    Mina通信框架应用示例

    《Mina通信框架应用详解》 Mina通信框架,全称为Apache MINA,是一个高度可扩展的、基于Java的网络应用程序开发框架。MINA的名字来源于多语言(Multi-purpose Infrastructure for Network Applications),它提供了...

    java mina框架全套

    Java Mina框架是一款高度可扩展且高性能的网络应用开发框架,专为开发网络服务和协议处理应用程序而设计。它提供了一种简洁、高效的API,使得开发者可以轻松地创建基于TCP/IP和UDP/IP协议的服务器和客户端应用。Mina...

    apache mina 框架实例

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,主要用在开发网络通信应用,如TCP/IP和UDP/IP协议的服务器和客户端。这个框架允许开发者以一种简单、高效的方式处理I/O操作,同时提供了丰富的功能,如多...

    mina框架使用总结.doc

    mina 框架使用总结 mina 框架是对 Java 的 NIO 包的一个封装,简化了 NIO 程序开发的难度,封装了很多底层的细节...MINA 框架是一个功能强大、灵活、可扩展的网络应用程序开发框架,对于开发网络应用程序非常有帮助。

    mina框架开发完整架包下载!

    Mina框架是一个高性能、事件驱动的网络应用框架,主要用于简化Java网络编程,特别是TCP和UDP协议的处理。它被广泛应用于开发服务器端应用,如FTP、SMTP、HTTP等协议的服务,以及任何基于TCP或UDP协议的应用。Mina的...

    mina 框架学习文档

    apache mina 框架的学习文档,通过此文档可以基本了解mina框架。

    Apache MINA框架相关资料

    4. **MINA和Spring整合**(MINA和spring整合.txt):Spring是一个广泛使用的Java应用框架,而MINA与Spring的整合使得开发者可以利用Spring的依赖注入和管理功能来简化MINA应用的开发。这份文档可能详细阐述了如何在...

    高性能网络架构Mina框架 下载

    Mina(Multithreaded Internet Network Application)框架是由Apache软件基金会提供的一个高性能、可伸缩的网络编程框架,它主要应用于Java NIO环境下的网络通信开发。Mina通过采用多线程模型和异步I/O技术来提高...

    MINA长连接框架实现通讯

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

    mina框架的jar包

    Mina框架是一个高度可扩展的网络通信应用框架,广泛应用于开发高性能、高效率的服务端应用,如TCP/IP、UDP以及HTTP等协议的服务器。它提供了一种事件驱动、异步处理的编程模型,使得开发者能够专注于业务逻辑,而...

Global site tag (gtag.js) - Google Analytics