从代码实现角度来分析mina
2012-05-07 16:49
363 查看
前段时间因为工作中用到了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工作流程的一点总结,下次争取写的更详细些。。。
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工作流程的一点总结,下次争取写的更详细些。。。
相关文章推荐
- Java NIO原理图文分析及代码实现
- 从零实现一个高性能网络爬虫(一)网络请求分析及代码实现
- (原创)代码分析-DataGrid实现自增列、单选、多选
- 带环单链表及链表相交问题的分析及代码实现
- [Android6.0][RK3399] 双屏异显代码实现流程分析(一)【转】
- Java NIO原理图文分析及代码实现
- 代码实现分析mpeg-2文件
- linux系统调用实现代码分析
- JavaScript 异步方法队列链实现代码分析
- 基于Visual C++之Windows核心编程代码分析(1)实现设备管理器枚举设备
- linux系统调用实现代码分析【转】
- Android_开源框架_Volley(Google IO 2013)源代码及内部实现分析
- Java NIO原理 图文分析及代码实现
- Hadoop基于Protocol Buffer的RPC实现代码分析-Server端
- 【JS 设计模式 】用组合模式来实现树形导航--代码结构思路分析(一)
- Java NIO原理 图文分析及代码实现
- [深度学习]Python/Theano实现逻辑回归网络的代码分析
- Bluez SPP实现代码分析
- Java NIO原理图文分析及代码实现
- 浅谈实现滑动验证码,Java核心代码以及原理分析