处理客户端新连接请求的方法从org.jboss.netty.channel.socket.nio.AbstractNioSelector.run()开始分析。
NioServerBoss是AbstractNioSelector的子类,处理服务器端接收新请求的处理类selector。如果有多个selector,可以创建bosspool时设置多个selector实例,新的绑定地址bind任务将依次均匀的添加到各个boss任务队列中。详见“Netty源码分析之线程模型”。
回到AbstractNioSelector.run()方法,它主要以死循环的方式做了以下几件事情:
1.首先设置原子变量wakenUp为false
2.开始阻塞监听selector.select(),退出阻塞的原因可能是有socket事件select正常返回或者被其它线程主动唤醒(如有新的bind 注册任务时)。
3.退出阻塞后,首先运行任务队列中任务(新bind时的注册accept事件任务)。然后再在NioServerBoss的process中处理selector中各个Key。
4.对于每个selectionKey,依次通过socket.accept返回新的channel,向上行流发送OPEN事件,再把已连接channel注册到NioWorker(另一类selector)中。
for (Iterator<SelectionKey> i = selectedKeys.iterator(); i.hasNext();) {
SelectionKey k = i.next();
i.remove();
NioServerSocketChannel channel = (NioServerSocketChannel) k.attachment();
try {
// accept connections in a for loop until no new connection is ready
for (;;) {
SocketChannel acceptedSocket = channel.socket.accept();
if (acceptedSocket == null) {
break;
}
registerAcceptedChannel(channel, acceptedSocket, thread);
}
}
5.注册过程如同bind一样,创建注册任务并添加到下一个NioWorker的任务队列中,并唤醒对应处理阻塞中的selector。注册任务包括:向worker的selector注册read事件,成功后向上行流通道传递CONNECTED事件。
分享到:
相关推荐
一个netty的入门教程以及源码分析视频,适合刚学习的人
netty源码解析PDF,网络编程
美团基础架构部闪电侠老师的netty源码分析视频
共分两大章:第1 章:深入浅出Netty源码剖析,第2 章:NIO+Netty5各种RPC架构实战演练,以及课程资料,希望对象学习netty的童靴有用。
Netty源码分析总结.rar
netty源码
netty源码和相关中文文档。帮助您快速上手netty开发。netty体验之旅祝您愉快
netty基本使用以及入门资料,具有netty的源码的分析以及服务器启动过程的介绍
netty源码解析视频教程,深入浅出netty源码视频
Netty好资料,Buffer介绍
Netty源码剖析+视频
Netty5.0架构剖析和源码解读.pdf是一本比较全的讲解netty5的书籍,任何对java的nio技术感兴趣的人都值得一看。
Netty权威指南源码
【项目实战】Netty源码剖析&NIO;+Netty5各种RPC架构实战演练三部曲视频教程(未加密)
netty-3.3.1.Final-sources.jar src源码
Netty源码解读之线程
视频分两部分 第1 章 : 第一部分、深入浅出Netty源码剖析。。 第2 章 : 第二部分、NIO+Netty5各种RPC架构实战演练
netty 源码
netty源码包,可以本地搭建netty源码环境,学习nio模式
Netty源码依赖包,最新版源码依赖包,源码解读必备