从代码实现角度来分析mina
来源:互联网 发布:起重机模拟软件 编辑:程序博客网 时间:2024/06/05 22:30
前段时间因为工作中用到了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
- 从Plugin的角度来分析OSGI
- 开篇,从代码实现角度学习数据结构
- 从用例角度来分析系统测试(横向)
- 从用例角度来分析系统测试(纵向)
- 从AI的角度来分析斗地主设计
- 从play角度来分析netty -- 初始化ServerBootstrap
- 从实现的角度来认识SpringIoC容器
- 代码分析你的网站从SEO的角度来看
- 从程序角度分析mapreduce原理与代码
- 从Java代码实现角度探讨CSRF(未完待续)
- MFC——从实现角度分析微云界面
- 从源码角度分析RACObserve的实现原理(一)
- [Android源码分析]从spec角度来详细分析inquiry command带来的影响
- 从存储角度分析hbase
- 从MVC角度分析LUCI
- 从设计角度分析MVC
- 从中医角度分析吸烟
- 笔记:函数相关注意的地方
- 教你如何用Squid做CDN把公司做到上市
- mysql客户端连接无法找到sock文件的ERROR 2002错误
- shell note01:some shell combinations
- quicksortNew;partitionNew
- 从代码实现角度来分析mina
- DX配置
- 渲染日志记录
- 关于短信接口的处理
- vs2005远程调试
- Android中如何判断联网
- 自我安慰一下
- libcurl的回调函数们
- 五个求解算法问题的方法