码迷,mamicode.com
首页 > Web开发 > 详细

Apache Mina的用法

时间:2015-03-04 14:47:19      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

        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分下载该示例代码

Apache Mina的用法

标签:

原文地址:http://blog.csdn.net/gaohuanjie/article/details/43764075

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!