深入理解netty(二)Channel
上一篇文章介绍过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相关推荐
- 一文理解Netty模型架构
转载自 一文理解Netty模型架构 本文基于Netty4.1展开介绍相关理论模型,使用场景,基本组件.整体架构,知其然且知其所以然,希望给读者提供学习实践参考. 1 Netty简介 Netty是 一 ...
- 深入理解Netty编解码、粘包拆包、心跳机制
点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 BIO .NIO .AIO 总 ...
- netty自定义channel id
netty自定义channel id.netty custom channel id 搞搞netty时发现默认的id很长,无法直接自定义. 于是我网上搜索了search一下,发现没有相关文章,那就自己 ...
- faster rcnn源码理解(二)之AnchorTargetLayer(网络中的rpn_data)
转载自:faster rcnn源码理解(二)之AnchorTargetLayer(网络中的rpn_data) - 野孩子的专栏 - 博客频道 - CSDN.NET http://blog.csdn.n ...
- 理解Netty中的零拷贝(Zero-Copy)机制
理解Netty中的零拷贝(Zero-Copy)机制 发表于2年前(2014-01-13 15:11) 阅读(10209) | 评论(12) 164人收藏此文章,我要收藏 赞29 12月12日北京O ...
- AQS理解之二,自己设计一个锁
AQS理解之二,自己设计一个锁 一,实现锁的条件 首先我们想一想,如果我们自己实现一个类似于java中的锁,我们可能需要哪些必要的东西: 1,记录是哪个线程持有了锁. 2,如果有一个变量代表加锁,A线 ...
- 设计模式理解(二)创建型——单例、原型
设计模式理解(二)单例(Singleton)与原型(Prototype) 为什么一起写,因为懒.... 单例,就是用了面向对象语言的一些奇技淫巧,把构造函数私有了,然后用一个自身类型的静态指针作为全局 ...
- Docker的一些理解(二)
Docker的一些理解(二) 百度百科 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上 ...
- 本质安全设备标准(IEC60079-11)的理解(二)
本质安全设备标准(IEC60079-11)的理解(二) 十,本安设备的测试 我们知道如何测试本安设备以及一些基本概念后, 现在需要进一步说明: (1),本安设备的测试和一般软件,硬件的测试是完全不同的 ...
- SVPWM算法理解(二)——关于非零基本矢量幅值和线电压幅值的解释
SVPWM算法理解(二)--关于非零基本矢量幅值和线电压幅值的解释 1 引言 2 非零基本矢量的幅值 3 线电压的幅值 4 电压空间矢量图中的图形含义 5 如何保证逆变器的输出电压不失真 1 引言 ...
最新文章
- 嵌入式python 图形界面_有哪些好的嵌入式操作系统界面库(GUI library)?
- Ubuntu使用PBIS认证
- 【20171111】Codevs 1064 虫食算80分
- measureChildren作品
- java 2d 绘图教程_Java标准教程:Java 2D绘图--第2章 从绘图开始
- .NET Core 容器化调查
- 【数据库原理及应用】经典题库附答案(14章全)——第三章:结构化查询语言SQL
- Java中多线程的性能比较
- 多台电脑共享一套鼠标键盘的免费方法
- 李清照 —— 别是一家
- 数据库和数据表的建立
- 2022-01-11每日刷题打卡
- 人工智能--状态空间问题求解方法
- 伴随矩阵例题_伴随矩阵习题及解答
- android 常用机型尺寸_android手机屏幕密度和逻辑尺寸
- 【Cicadaplayer】基于FFmpeg 计算缓存队列duration:av_rescale_q 、av_get_time_base_q、av_q2d
- java nginx 502_Nginx 中 502 和 504 错误详解
- 关于IE无法打开站点XX已终止操作问题
- 深克隆与浅克隆的区别
- Java的System.currentTimeMillis()的性能问题