mina2.0 源码分析--- 基于nio的服务端socket监听过程

整体来说 ,mina服务端采用基于nio的单线程,轮询机制。 使用selector  获取客户端的链接,并创建sesssion,session通过process来处理io操作。

    nio的典型模式如下所示:

 

Java代码
  1. private  NioEchoServer() throws  IOException {  
  2.        Selector  roller = Selector.open();  
  3.         ServerSocketChannel serverChannel = ServerSocketChannel.open();  //   
  4.         serverChannel.socket().bind(new  InetSocketAddress(port));  
  5.         serverChannel.configureBlocking(false );  
  6.         serverChannel.register(roller, SelectionKey.OP_ACCEPT);  
  7.     }  
  8.   
  9.   
  10.   public  void  start() throws  IOException {  
  11.         int  keyAdded = 0 ;  
  12.         while  ((keyAdded = roller.select()) > 0 ) {  
  13.             Set<SelectionKey> keySets = roller.selectedKeys();  
  14.             Iterator iter = keySets.iterator();  
  15.             while  (iter.hasNext()) {  
  16.                 SelectionKey key = (SelectionKey) iter.next();  
  17.                 iter.remove();  
  18.                 actionHandler(key);  
  19.             }  
  20.         }  
  21.     }  
private NioEchoServer() throws IOException {
       Selector  roller = Selector.open();
        ServerSocketChannel serverChannel = ServerSocketChannel.open();  //
        serverChannel.socket().bind(new InetSocketAddress(port));
        serverChannel.configureBlocking(false);
        serverChannel.register(roller, SelectionKey.OP_ACCEPT);
    }


  public void start() throws IOException {
        int keyAdded = 0;
        while ((keyAdded = roller.select()) > 0) {
            Set<SelectionKey> keySets = roller.selectedKeys();
            Iterator iter = keySets.iterator();
            while (iter.hasNext()) {
                SelectionKey key = (SelectionKey) iter.next();
                iter.remove();
                actionHandler(key);
            }
        }
    }

   1 服务端绑定port

   2 创建Selector

   3 创建SeversocketChannel,面向流的侦听socket 通道。

   4  监听客户端的请求,

 

 

 

接下来就通过mina 创建服务端socket Accpeptor 使用单线程并监处理端口和客户端请求,学习一下mina的源码

Java代码
  1. IoAcceptor  acceptor  =  new   NioSoketAcceptor ();  //根据实现的类,调用不同的构造方法   
IoAcceptor  acceptor  =  new  NioSoketAcceptor ();  //根据实现的类,调用不同的构造方法

 

上面代码, 创建一个socket Acceptor  ,mina内部实现如下 :

 

super(new DefaultSocketSessionConfig(), NioProcessor.class); //传入具体的ioprocess 的实现类。

 

最终调用的类和构造方法:

Java代码
  1. AbstractPollingIoAcceptor       
  2.    protected  AbstractPollingIoAcceptor(IoSessionConfig sessionConfig,    //模板模式的使用,根据子类传入IoProcessor实现类构造SimpleIoprocessorPool 池   
  3.             Class<? extends  IoProcessor<T>> processorClass) {  
  4.         this (sessionConfig, nullnew  SimpleIoProcessorPool<T>(processorClass),  
  5.         
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值