Netty源码解析(6)-编码器
1、通过channel调用writeAndFlush方法
2、在pipeline上从tail节点开始往head节点传播write方法,判断是否能处理这个对象,最后会回调到MessageToByteEncode的encode方法,向out里面写入字节流。
匹配对象
分配内存
编码对象
释放对象
传播数据
释放内存
3、在head节点里面的write方法里面处理写入的字节流,通过unsafe写入字节流。Head里面的unsafe是
direct化ByteBuf,AbstractUnsafe write方法filterOutboundMessage,通过创建一个directByteBuf将数据流拷贝进去,将堆内内存转化为堆外内存
将directByteBuf封装成一个entry,往队列里面添加entry三个指针一个是已经刷新的指针,一个是未刷新指针,一个是最后节点
设置写状态,如果队列里面的内容大于64k,就设置这个channel为不能写的状态
4、调用head节点里面的flush方法
1、添加刷新标志并设置写标志,判断队列内容是否小于32k,如果是就设置这个channel状态为可写
2、遍历buffer队列,过滤ByteBuf
3、调用jdk底层api进行自旋写
相关推荐
fengshantao 2020-10-29
arctan0 2020-10-14
爱传文档 2020-07-28
gzx0 2020-07-05
fengshantao 2020-07-04
fengshantao 2020-07-02
jannal 2020-06-21
arctan0 2020-06-19
arctan0 2020-06-16
gzx0 2020-06-14
fengshantao 2020-06-13
gzx0 2020-06-12
arctan0 2020-06-11
fengshantao 2020-06-11
mbcsdn 2020-05-19
arctan0 2020-05-16
爱传文档 2020-05-08
爱传文档 2020-05-04