深入理解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//传播事件
通过最后两次传播事件最后传播到用户方法

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会说话的皮卡丘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值