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