Netty封装了java底层的NIO操作,它提供了自己的写缓冲区。当需要发送数据时,它是先把数据写到自己的缓冲区ChannelOutboundBuffer,可多次写入,然后调用flush操作将之前写缓冲区的数据一次性发出,每个ChannelOutboundBuffer对应一个Channel,该设计可以减少TCP缓存的压力,从而提高系统的吞吐率。
ChannelOutboundBuffer的属性参数如下:
ChannelOutboundBuffer内部数据其实是通过一个链条来保存,整体结构如下:
ChannelOutboundBuffer提供的功能主要如下:
- 向ChannelOutboundBuffer写入数据,
addMessage
方法 - 准备待发送的数据,
addFlush
方法 - 从ChannelOutboundBuffer获取待发送的数据,
nioBuffers
方法 - 发送完以后清理掉已发送的数据,回收空间,
removeBytes
方法
接下来逐一分析。
addMessage
向ChannelOutboundBuffer写入数据:
addFlush
准备待发送的数据:
剩下的两个方法下一篇章再做分析。