继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Netty源码阅读入门实战(五)-新连接检测

蝴蝶刀刀
关注TA
已关注
手记 368
粉丝 37
获赞 183

5bcc49a10001cab810000337.jpg


5bcc49a40001dec410000514.jpg

1 检测新连接

5bcc49a60001dbbb10000429.jpg

5bcc49a600013f3310000147.jpg

打断点


telnet 此机地址,引起连接建立


5bcc49a700012c8a10000274.jpg

执行到此,进入查看


5bcc49a8000188f410000370.jpg


5bcc49a90001384808440660.jpg


5bcc49a90001540410000102.jpg

以上即对应 read 方法


5bcc49aa00010e4010000513.jpg


5bcc49ac00016da410000446.jpg


1000


1000


继续返回原先位置

2 NioSocketChannel的创建

1000


1000


1000


1000


1000


1000


1000


1000


禁止小包组成大包再发送方法


1000


1000


看看这个静态变量

1000


1000


1000


1000


由于 netty 常部署在服务端,所以默认启动 TCP无延时

1000


1000


1000

3 Channel的分类

1000


1000


先看看最顶层的框架 Channel


1000


网络 Socket 读写绑定的一种抽象

1000


1000

作为骨架,保存了很多基础且重要的信息


1000


1000


使用选择器监听 IO 事件的一个抽象类
保存了 JDK 底层的一个 Channel


1000

开启非阻塞模式


1000


1000


1000


1000

回到了抽象类,即保存了一个ACCEPT 事件


看过服务 Channel 后,再看看客户端 Channel

1000


1000


1000


1000


1000


客户端与服务端的 Channel 在 unsafe 类上也不同
客户端 Chanel


1000


1000


服务端 Chanel

1000


用于某种 Chanel 的读写情况

1000

主要负责读事件


1000

读字节


不同端配置项也不同

1000

4 新连接NioEventLoop的分配和selector注册

1000


1000


1000


1000


即为此处调用


1000


1000


1000

回调之后,最终都会删除自身


1000


1000


1000


1000


1000


1000


1000


1000


1000


1000


1000


回去看看 register 方法


1000


1000


1000


1000


1000


1000

5 NioSocketChannel读事件的注册

1000


1000


1000


1000


1000


1000


1000


1000


1000


1000


1000


可以开始接收数据了


1000


1000


回顾一下创建

1000


1000


1000

6 新连接接入总结

1000


1000


boss线程的第一个过程轮训处Accept事件,然后boss线程第二个过程通过jdk底层的channel的accept方法创建该连接。


1000


新连接NioEventLoop的分配和selector注册可以回答。boss线程调用chooser的next方法,拿到一个NioEventLoop,然后将这条连接注册到NioEventLoop的selector上面。



作者:芥末无疆sss
链接:https://www.jianshu.com/p/df5673e80697
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP