上一篇文章介绍过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. 嵌入式python 图形界面_有哪些好的嵌入式操作系统界面库(GUI library)?
  2. Ubuntu使用PBIS认证
  3. 【20171111】Codevs 1064 虫食算80分
  4. measureChildren作品
  5. java 2d 绘图教程_Java标准教程:Java 2D绘图--第2章 从绘图开始
  6. .NET Core 容器化调查
  7. 【数据库原理及应用】经典题库附答案(14章全)——第三章:结构化查询语言SQL
  8. Java中多线程的性能比较
  9. 多台电脑共享一套鼠标键盘的免费方法
  10. 李清照 —— 别是一家
  11. 数据库和数据表的建立
  12. 2022-01-11每日刷题打卡
  13. 人工智能--状态空间问题求解方法
  14. 伴随矩阵例题_伴随矩阵习题及解答
  15. android 常用机型尺寸_android手机屏幕密度和逻辑尺寸
  16. 【Cicadaplayer】基于FFmpeg 计算缓存队列duration:av_rescale_q 、av_get_time_base_q、av_q2d
  17. java nginx 502_Nginx 中 502 和 504 错误详解
  18. 关于IE无法打开站点XX已终止操作问题
  19. 深克隆与浅克隆的区别
  20. Java的System.currentTimeMillis()的性能问题

热门文章

  1. 数学建模(12)——多元回归分析法
  2. 如何用公式编辑器打绝对值符号?
  3. 单车菜鸟上路:初征潭柘寺(多图)
  4. ObjectArx-自定义对象-派生自ObjectARX类
  5. python之String字符串处理库,文件/目录,日期和时间
  6. DSP篇--C6678 SPI BOOT详解及其优化实现
  7. graphical GUI
  8. linux命令调ftp限速,Linux下操作设置ftp普通账号和vip账号限速
  9. The Grammer of Graphics 读书笔记 - How To Make a Pie
  10. python traceback安装_python之traceback