Netty3 源代码分析 - NIO server绑定过程分析
     一个框架封装的越好,越利于我们高速的coding。可是却掩盖了非常多的细节和原理。可是源代码可以揭示一切。

服务器端代码在指定好ChannelFactory。设定好选项。而后Bootstrap.bind操作就会开启server。接受对端的连接。

所以有必要对这后面的过程分析清楚,下图是关键流程。先是构建一个默认的Pipeline,为我们接下来要创建的监听通道服务。这个Pipeline里面会增加一个Binder的上行事件处理器。接下来创建了至关中的NioServerSocketChannel,在构造的过程中,调用了NIO中ServerSocketChannel的open方法打开套接字,设为非堵塞,然后会触发一个OPEN的上行 ChannelStateEvent(为后文买下伏笔),接下来Bootstrap就会等待着成功的信号。还有一方面,在将Binder这个Handler增加bossPipeline的时候,它就已经准备好运转了,在收到一个OPEN事件后,就会设置套接字选项,运行真正的套接字绑定,而后Future.setSuccess就会让前面的bind方法成功返回,開始运转。

代码例如以下:
public void channelOpen( ChannelHandlerContext ctx, ChannelStateEvent evt) {
            try {
                 // 内部类能够訪问外部类的方法 。如 getPipelineFactory()。
                evt.getChannel().getConfig().setPipelineFactory(getPipelineFactory());
                // Split options into two categories: parent and child.
                Map<String, Object> allOptions = getOptions();
                Map<String, Object> parentOptions = new HashMap<String, Object>();
                for (Entry<String, Object> e: allOptions.entrySet()) {
                    if (e.getKey().startsWith( "child.")) {
                        childOptions.put( e.getKey().substring(6), e.getValue());
                    } else if (!"pipelineFactory" .equals(e.getKey())) {
                        parentOptions.put(e.getKey(), e.getValue());
                    }
                }
                // Apply parent options.
                evt.getChannel().getConfig().setOptions(parentOptions);
            } finally {
                ctx.sendUpstream(evt);
            }
            //============ 真正的绑定套接字 =======
            evt.getChannel().bind( localAddress).addListener( new ChannelFutureListener() {
                public void operationComplete(ChannelFuture future) throws Exception {
                    if (future.isSuccess()) {
                      // 这里触发了 bind的成功
                        bindFuture.setSuccess();
                    } else {
                        bindFuture.setFailure(future.getCause());
                    }
                }
            });
        }

更具体的理解看Netty3 源代码凝视,见Github。

Netty3 源代码分析 - NIO server绑定过程分析相关推荐

  1. Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析

    原文地址: http://blog.csdn.net/luoshengyang/article/details/6629298 在前面一篇文章浅谈Android系统进程间通信(IPC)机制Binder ...

  2. Android应用程序绑定服务(bindService)的过程源代码分析

    Android应用程序组件Service与Activity一样,既可以在新的进程中启动,也可以在应用程序进程内部启动:前面我们已经分析了在新的进程中启动Service的过程,本文将要介绍在应用程序内部 ...

  3. Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析(2)...

    注意,这里的参数reply = 0,表示这是一个BC_TRANSACTION命令.         前面我们提到,传给驱动程序的handle值为0,即这里的tr->target.handle = ...

  4. Android应用程序进程启动过程的源代码分析(1)

    Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信机制:这两个特点都是在进程的初始化过程中实 ...

  5. Android系统进程Zygote启动过程的源代码分析

    原文地址:http://blog.csdn.net/luoshengyang/article/details/6747696 Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口 ...

  6. Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 1 背景 之所以写这一篇博客的原因是由于之前有写过一篇<Android应用setCont ...

  7. Bind9源代码分析

    Bind9源代码分析 1.串一遍resolver.c和dispacth.c里面的内容 dns_resolver_prime(请求解析器开始一个fetch启动,如果它还没有启动.一些启动判断,然后进行了 ...

  8. Hadoop源代码分析

    http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...

  9. SRS4.0源代码分析之RTMP拉流处理

    目标: 上一节分析了SRS针对推流客户端的处理逻辑,这里接下来分析针对拉流客户端的处理逻辑. SRS拉流端处理逻辑简单说就是SrsRtmpConn::do_playing()协程从SrsLiveCon ...

最新文章

  1. c++语言函数大全,C++函数
  2. 句法分析应用领域及意义
  3. VMware 虚拟机
  4. 网页脚本基本java语法_JSP 基础语法
  5. Internal Server Error - http code 500
  6. 保存时自动加分号_CAD自动保存文件扩展名是什么?如何快速恢复自动保存文件?...
  7. php图片上传有黑色背景,php Imagemagick jpg黑色背景
  8. 2021李宏毅机器学习课程笔记——Auto Encoder
  9. php数据库搬家,php 用adodb实现数据库搬家
  10. 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常
  11. 【poj1743-Musical Theme】不可重叠最长重复子串-后缀数组
  12. LG GPRO2 SudaMod 3.1 自编译版 20180524 更新
  13. 经典卷积神经网络——VGG16
  14. 彩虹的原理与绘制方法
  15. Android显示raw格式,手机上怎么处理RAW格式?有何不同?
  16. eemd的r语言序列_EEMD详解
  17. 工作小记 编译 ffmpeg gpu 版本
  18. Windows 下 Spark+Hadoop+Scala 安装
  19. Linux操作系统的性能将主要取决于,高校邦Linux操作系统安全与性能调优章节测试答案...
  20. 【产品】UI设计:哪些字体可以商用

热门文章

  1. Java多线程初学者指南(10):使用Synchronized关键字同步类方法
  2. 以安全之名:俄罗斯强制所有消息应用留后门
  3. C语言之基本算法26—佩尔方程求解
  4. 趋势科技、亚马逊AWS作后盾,天云趋势首款SaaS安全服务强势来袭
  5. TestBird频现国内手游“盛宴” 开发商互相介绍用得很赞
  6. 图的实现(邻接链表C#)
  7. c#运行shell命令
  8. 英雄会解读:不一样的回答,一样的CTO
  9. python file_python3之File文件方法
  10. DPDK — IGB_UIO,与 UIO Framework 进行交互的内核模块