看过TCP/IP协议,也看过关于Netty方面的代码,总结一下疑惑的地方。
关于伪异步IO模型,为什么会慢?
当消息的接收方处理缓慢的时候,将不能及时从TCP缓冲区读取数据,将会导致发送方的TCP“窗口”大小不断减小,直至为0,双方处于Keep-Alive状态,消息发送方将不能再向TCP缓冲区写入消息,如果采用的是同步阻塞I/O,写操作将会无限期阻塞,直到TCP“窗口”大小大于0或发生I/O异常。如果不是同步阻塞I/O,会怎么样。
Netty4数据传输图
- Channel 绑定到 ChannelPipeline
- ChannelPipeline 绑定到 包含 ChannelHandler 的 Channel
- ChannelHandler
- 当添加 ChannelHandler 到 ChannelPipeline 时,ChannelHandlerContext 被创建
- ChannelHandlerContext 方法调用
- 事件发送到了下一个 ChannelHandler
- 经过最后一个ChannelHandler后,事件从 ChannelPipeline 移除
Netty4编码与解码
Netty 从 Channel 引导客户端
- 当 bind() 调用时,ServerBootstrap 创建一个新的ServerChannel 。 当绑定成功后,这个管道就能接收子管道了
- ServerChannel 接收新连接并且创建子管道来服务它们
- Channel 用于接收到的连接
- 管道自己创建了 Bootstrap,用于当 connect() 调用时创建一个新的管道
- 新管道连接到远端
- 在 EventLoop 接收通过 connect() 创建后就在管道间共享
线程模型
Eventloop类图
Future类图
Channel类图
Handle类图
参考:
https://waylau.com/essential-netty-in-action/
https://www.jianshu.com/nb/6812432
https://www.jianshu.com/p/d408f891f52f
https://blog.csdn.net/zx156955/article/details/106258701
Netty 源码分析之 三 我就是大名鼎鼎的 EventLoop(一)