MINA2.0简单使用

一直知道MINA是apache 开发的一个开发socket编程框架,但一直没弄清楚MINA2.0里的多线程该如何处理,根据apache提供的文档,使用MINA2.0开发多线程的程序变的非常简单,只用在其filter中加入线程池就可以了,感觉挺神奇,于是参考apache的其他项目,写了个小例子,下面是代码,作为自己以后学习使用。

public class MinaServerTest {
	
	 private SocketAcceptor acceptor;
	 
	 private ExecutorService filterExecutor = new OrderedThreadPoolExecutor();//apache 提供的线程池,有参数可以设置,但不知道设置什么时候比较好,就用了默认的,从参数的设置上看,(因为没看源码,我自己猜测)其应该是使用的jdk的线程池
	

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MinaServerTest mst=new MinaServerTest();
		mst.start();

	}
	
	 public synchronized void start(){
		 acceptor = new NioSocketAcceptor(Runtime.getRuntime()
                 .availableProcessors());
		 
		 acceptor.setReuseAddress(true);
         acceptor.getSessionConfig().setReadBufferSize(2048);
         acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,
                 10);
         // Decrease the default receiver buffer size
         ((SocketSessionConfig) acceptor.getSessionConfig())
                 .setReceiveBufferSize(512);
 
         MdcInjectionFilter mdcFilter = new MdcInjectionFilter();
 
         acceptor.getFilterChain().addLast("mdcFilter", mdcFilter);
         acceptor.getFilterChain().addLast("threadPool",
                 new ExecutorFilter(filterExecutor));//设置线程池,以支持多线程
         acceptor.getFilterChain().addLast("codec",
        		 new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName("UTF-8"))));//协议
         acceptor.getFilterChain().addLast("mdcFilter2", mdcFilter);
         acceptor.getFilterChain().addLast("logger", new LoggingFilter());
         acceptor.setHandler(new YourHandler());//你自己的处理类
         try{
         acceptor.bind((new InetSocketAddress(8080)));
         }catch(IOException e){
        	 e.printStackTrace();
         }
		 
	 }

}

 handler我没有实现,这里只是举个小例子,handler需要根据业务自己编写相应的函数就好了

public class YourHandler implements IoHandler{
	public void sessionCreated(IoSession session) throws Exception
	{
		;//会话创建   
	}
    public void sessionOpened(IoSession session) throws Exception{
    	;//打开会话,与sessionCreated最大的区别是它是从另一个线程处调用的   
    }
    public void sessionClosed(IoSession session) throws Exception{
    	;//会话结束,当连接关闭时被调用   
    }
    public void sessionIdle(IoSession session, IdleStatus status) throws Exception{
    	;//会话空闲   
    }
   public void exceptionCaught(IoSession session, Throwable cause) throws Exception{
    	;//异常捕获,Mina会自动关闭此连接   
    }
   public  void messageReceived(IoSession session, Object message) throws Exception{
    	;//接收到消息   
    }
   public void messageSent(IoSession session, Object message) throws Exception{
    	;//发送消息 
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值