从代码实现角度来分析mina

       前段时间因为工作中用到了mina,最近几天有些闲下来了,所以认真的研究了下mina的实现,主要针对的是TCP/IP通讯的场景。

mina基于java nio的select多路复用的机制,其底层实现linux下对应epoll,windows下对应iocp。

      典型服务端实现过程:

1.创建acceptor对象NioSocketAcceptor,这个实例持有包含了大小为CPU核数+1 的 NioProcessor数组 的SimpleIoProcessorPool 。默认的newCachedExecutor线程池,打开已个选择器Selector。对应的serverSocketChannel向选择器注册,监听网络连接事件。

2. 这个SimpleIoProcessorPool创建一个默认的newCachedExecutor线程池,数组中的所有Processor实例共享这个线程池。

3.通过acceptor.bind()函数,由线程池执行异步任务。该任务循环的堵塞在selector.select()方法中。

4.当有客户端连接的时候。select()返回,接受连接,创建NioSession对象,session持有acceptor,processor,socketChannel,SelectedKey等所有相关对象的引用。

     session的属性SimpleIoProcessorPool从中轮询取出一个NioProcessor,把它放到session的attributes中,同时这个NioProcessor会将这个session也保存到自己的

    newSessions队列中(queue)。执行异步任务processor的selector.select();NioProcessor在构造以及init()的时候分别创建选择器,以及将session的scoketChannel向该选择器注册OP_READ事件。将acceptor设置的一堆filter加入到session的IoFilterChain中。将这个session加入到processor的managedSession中,并执行session的IoFilterChain的

sessionCreated和sessionOpened函数。当有读写事件的时候,select()返回,分别调用filterChain的messageReceived()和messageSent();

以上是mina工作流程的一点总结,下次争取写的更详细些。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值