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