上一篇文章介绍过channel,channel里面主要是封装了对于客户端连接的建立等的一些api,以及socket等,对于封装的api可以进行一些读写
先留两个问题:
1.服务端的socket在哪里初始化?
2.在哪里accept链接?

关于创建channel主要分为以下几个步骤
创建channel
初始化channel
注册selector

其中创建channel的时候调用链路主要为
bind()-》dobind()-〉initandRegister-》new channel
其中initAndRegister内部有一个channelFactory.newChannel这个通过工厂模式来生成chennel的代码

进来之后可以发现他是通过clazz来实现,即通过反射来实现

反射创建服务端channel:
newSocket()
NioServerSocketChannelConfig()
然后执行父类的构造函数
AbstractNioChannel()
这里面会执行
configBlocking(false)
以及AbstractChannel(id,unsafe,pipeline)
客户端和服务端端channel都会继承abstractchannel这个抽象类
其中id是唯一标识,unsafe是底层关于tcp底层的读写的一些操作,
pipeline是后面要讲过的非常重要的组件(其实上一章也提过)

好了,创建channel的步骤基本讲完了,后面要说一下他是如何进行初始化的
init()
setChannelOps setChannelAttrs
setChildOps setChildsAttrs//把用户自定义的两个参数保存起来
configHandler//其实就是把用户输入的handler给他拿到,然后通过pipeline.addLast的方式这样一个逻辑链处理列给他封装进去
addServerBootstrapAcceptor

最后就是注册selector的过程
主要流程如下:
AbstractChannel.register这一个入口进入
this.eventLoop=eventLoop//绑定eventloop
register0()
.doregister()//调用jdk底层注册
pipeline.invokerHandlerAddIfNeeded//传播事件
pipeline.fireChannelRegistered//传播事件
通过最后两次传播事件最后传播到用户方法

深入理解netty(二)Channel相关推荐

  1. 一文理解Netty模型架构

    转载自  一文理解Netty模型架构 本文基于Netty4.1展开介绍相关理论模型,使用场景,基本组件.整体架构,知其然且知其所以然,希望给读者提供学习实践参考. 1 Netty简介 Netty是 一 ...

  2. 深入理解Netty编解码、粘包拆包、心跳机制

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 BIO .NIO .AIO 总 ...

  3. netty自定义channel id

    netty自定义channel id.netty custom channel id 搞搞netty时发现默认的id很长,无法直接自定义. 于是我网上搜索了search一下,发现没有相关文章,那就自己 ...

  4. faster rcnn源码理解(二)之AnchorTargetLayer(网络中的rpn_data)

    转载自:faster rcnn源码理解(二)之AnchorTargetLayer(网络中的rpn_data) - 野孩子的专栏 - 博客频道 - CSDN.NET http://blog.csdn.n ...

  5. 理解Netty中的零拷贝(Zero-Copy)机制

    理解Netty中的零拷贝(Zero-Copy)机制 发表于2年前(2014-01-13 15:11)   阅读(10209) | 评论(12) 164人收藏此文章,我要收藏 赞29 12月12日北京O ...

  6. AQS理解之二,自己设计一个锁

    AQS理解之二,自己设计一个锁 一,实现锁的条件 首先我们想一想,如果我们自己实现一个类似于java中的锁,我们可能需要哪些必要的东西: 1,记录是哪个线程持有了锁. 2,如果有一个变量代表加锁,A线 ...

  7. 设计模式理解(二)创建型——单例、原型

    设计模式理解(二)单例(Singleton)与原型(Prototype) 为什么一起写,因为懒.... 单例,就是用了面向对象语言的一些奇技淫巧,把构造函数私有了,然后用一个自身类型的静态指针作为全局 ...

  8. Docker的一些理解(二)

    Docker的一些理解(二) 百度百科 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上 ...

  9. 本质安全设备标准(IEC60079-11)的理解(二)

    本质安全设备标准(IEC60079-11)的理解(二) 十,本安设备的测试 我们知道如何测试本安设备以及一些基本概念后, 现在需要进一步说明: (1),本安设备的测试和一般软件,硬件的测试是完全不同的 ...

  10. SVPWM算法理解(二)——关于非零基本矢量幅值和线电压幅值的解释

    SVPWM算法理解(二)--关于非零基本矢量幅值和线电压幅值的解释 1 引言 2 非零基本矢量的幅值 3 线电压的幅值 4 电压空间矢量图中的图形含义 5 如何保证逆变器的输出电压不失真 1 引言   ...

最新文章

  1. Oracle数据库 查看表是否是 索引组织表的方法
  2. vue data数据修改_Vue 超清晰思维导图(7张),详细知识点梳理!
  3. 鸿蒙os开发小程序,9岁小学生展示鸿蒙OS开发:这操作太秀了
  4. 菜鸟车辆路径规划创造26项世界纪录 实际可降低10.3%配送成本
  5. php获取40001,php - Discord API错误#40001未经授权 - SO中文参考 - www.soinside.com
  6. python网络模型的保存与加载
  7. 呼叫前转业务在VoIP系统中的实现
  8. html广告20s倒计时,简单时尚的jQuery倒计时插件
  9. 机器学习实战(八)分类回归树CART(Classification And Regression Tree)
  10. 关于微信开发者平台移动应用(android)获取签名问题
  11. 自定义控件之——封装控件(一)
  12. 怎样在电脑上录制ppt课件?如何录制课件讲解视频
  13. Fedora 14 root权限登录
  14. LeetCode_OJ【262】Trips and Users
  15. 好文分享 行到艰难处 方是修心时
  16. pandas数据合并:concat、join、append
  17. Prodigal基因预测
  18. JS控制GIF图片的停止与显示(掷骰子实现)
  19. 中文网站和英文网站在SEO优化中会存在区别吗?
  20. MySQL 到Oracle 实时数据同步实操分享

热门文章

  1. php通用漏洞phpinfo,php文件包含漏洞(利用phpinfo)复现
  2. 实例分割综述_文献综述产生自然语言对抗实例
  3. C语言建立bool类型数组,bool类型数组
  4. 【算法导论学习-012】n个数随机等概率的抽样m个
  5. C语言源程序怎么到可执行程序
  6. C#特性(Attribute)讲解
  7. OpenJudge 1.7.1
  8. 深入理解Transformer
  9. C# SolidWorks 二次开发 API---调用Solidworks命令
  10. 变量命名及常用属性大全