Apache Mina的用法

        Apache MINA是“Multipurpose Infrastructure for Network Applications”的简写,它是用于开发高性能和高可扩展性的网络应用程序的基础框架。该框架有如下优点:
        1、使用该框架来开发的网络应用程序代码结构清晰明了;
        2、该框架完成了底层的线程管理,省去了处理底层I/O和线程并发等复杂工作;
        3、该框架内置的编码器可以满足大多数用户的需求,省去了开发人员对消息进行编码解码的工作;
        4、该框架具有较高的执行效率,具称使用该框架开发服务器程序的性能已经逼近使用 C/C++语言开发的网络服务器程序。
        下面以一个详细的示例来演示一下Apache Mina的用法:
        工程结构如下图:

技术分享

        限于篇幅,这里只给出上图标出的两个文件中的代码,完整的源码可通过点击本文最下面的超链接下载:

StartMinaClient.java文件中的代码:

package com.ghj.packageofclient;

import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.common.CloseFuture;
import org.apache.mina.common.ConnectFuture;
import org.apache.mina.common.DefaultIoFilterChainBuilder;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

/**
 * 启动mina客户端
 * 
 * @author 高焕杰
 */
public class StartMinaClient {

	public static void main(String[] args) {

		NioSocketConnector connector = new NioSocketConnector();//创建客户端连接器
		DefaultIoFilterChainBuilder filterChain = connector.getFilterChain();
		filterChain.addLast("logger", new LoggingFilter());//设置日志工厂过滤器
		filterChain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));//设置文本编解码过滤器
		connector.setConnectTimeout(3000);//设置连接超时时间(单位毫秒)
		connector.setHandler(new ClientHandlerAdapter());//设置事件处理器
		connector.getSessionConfig().setReadBufferSize(1024);//设置读缓冲区大小  
		connector.getSessionConfig().setWriteTimeout(1000); //设置写操作的超时时间 
		connector.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 3);//第一个参数用于指定空闲状态,第二个参数用于指定Session的闲置时间(单位秒),此处含义为:读写 通道均在3 秒内无任何操作就进入空闲状态
		ConnectFuture connectFuture = connector.connect(new InetSocketAddress("127.0.0.1",	9123));//建立连接
		connectFuture.awaitUninterruptibly();//等待连接创建完成
		IoSession session = connectFuture.getSession();//保存会话属性和发送消息
		session.write("你好 Apache Mina服务器端!!!");//发送消息
		session.write("quit"); //发送消息
		CloseFuture future = session.getCloseFuture();
		future.awaitUninterruptibly();//等待连接断开
		future.awaitUninterruptibly(1000);//等待连接断开
		connector.dispose();
	}
}

StartMinaServer.java文件中的代码:

package com.ghj.packageofserver;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.common.DefaultIoFilterChainBuilder;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

/**
 * 启动mina服务端
 * 
 * @author 高焕杰
 */
public class StartMinaServer {

	public static void main(String[] args) {

		IoAcceptor acceptor = new NioSocketAcceptor();//创建服务端监听
		acceptor.setHandler(new ServerHandlerAdapter());//为该acceptor设置用于业务处理的Hanlder实例
		acceptor.getSessionConfig().setReadBufferSize(1024);//设置读缓冲区大小  
	    acceptor.getSessionConfig().setWriteTimeout(1000); //设置写操作的超时时间 
		DefaultIoFilterChainBuilder filterChain = acceptor.getFilterChain();
		filterChain.addLast("logger", new LoggingFilter());//设置日志工厂过滤器
		filterChain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));//设置文本编解码过滤器
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 3);//第一个参数用于指定空闲状态,第二个参数用于指定Session的闲置时间(单位秒),此处含义为:读写 通道均在3 秒内无任何操作就进入空闲状态
		try {
			acceptor.bind(new InetSocketAddress(9123));//绑定监听端口
			System.out.println("服务器启动成功");
		} catch (IOException e) {
			System.out.println("服务器启动失败");
			e.printStackTrace();
		}
	}
}
0分下载该示例代码

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。