码迷,mamicode.com
首页 > Web开发 > 详细

Netty从入门到放弃,从放弃在到入门

时间:2020-02-25 13:07:18      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:and   ESS   文章   设置   相关   hat   ini   pip   lan   

Nio的好文章:https://zhuanlan.zhihu.com/p/64537916?utm_source=wechat_session&utm_medium=social&utm_oi=660405125986914304

 

 

服务端Channel初始化过程
1. 通过 BootstrapChannelFactory 实例化 NioServerSocketChannel(实例化 Channel 的具体类型又是和在初始化 ServerBootstrap 时传入的 channel() 方法的参数相关)
a. 调用 NioServerSocketChannel.newSocket(DEFAULT_SELECTOR_PROVIDER) 打开一个新的 Java NIO ServerSocketChannel
b. 在 AbstractChannel(Channel parent) 中初始化 AbstractChannel 的属性:
parent 属性置为 null
unsafe 通过newUnsafe() 实例化一个 unsafe 对象
pipeline 是 new DefaultChannelPipeline(this) 新创建的实例
c. AbstractNioChannel 中的属性:
SelectableChannel ch 被设置为 Java ServerSocketChannel, 即 NioServerSocketChannel#newSocket 返回的 Java NIO ServerSocketChannel.
readInterestOp 被设置为 SelectionKey.OP_ACCEPT
SelectableChannel ch 被配置为非阻塞的 ch.configureBlocking(false)
d. NioServerSocketChannel 中的属性:
ServerSocketChannelConfig config = new NioServerSocketChannelConfig(this, javaChannel().socket())

2. NioServerSocketChannel 和 BossGroup 中 eventLoop 的 Selector 关联, 并将 Handler 添加到 NioServerSocketChannel 的 PipeLine中
a. 将 Handler 和 ServerBootstrapAcceptor 添加到 NioServerSocketChannel 的 PipeLine 中。
b. initAndRegister() 中的 ChannelFuture regFuture = group().register(channel); 这里的 register() 是指将 NioServerSocketChannel 和 BossGroup 关联。

3. NioSocketChannel 和 WorkGroup 中 eventLoop 的 Selector 关联
initAndRegister() 中的 init() 方法中会 new ServerBootstrapAcceptor()
a. 当有新的客户端连接请求时, ServerBootstrapAcceptor.channelRead 负责新建此连接的 NioSocketChannel。
b. ServerBootstrapAcceptor 的 channelRead() 方法会添加 childHandler 到 NioSocketChannel 对应的 pipeline 中。
c. 将此 NioSocketChannel 绑定到 workerGroup 中的某个 eventLoop 中。

Netty从入门到放弃,从放弃在到入门

标签:and   ESS   文章   设置   相关   hat   ini   pip   lan   

原文地址:https://www.cnblogs.com/panning/p/12360864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!