码迷,mamicode.com
首页 > Web开发 > 详细

Netty源码解析(6)-编码器

时间:2020-04-22 22:47:55      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:rect   封装   释放内存   jdk   方法   大于   filter   str   direct   

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进行自旋写

Netty源码解析(6)-编码器

标签:rect   封装   释放内存   jdk   方法   大于   filter   str   direct   

原文地址:https://www.cnblogs.com/xiaofeiyang/p/12757368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!