Netty 编码与数据的写入
Netty 编码
业务里的数据最终需要通过socket写回到用户端,我们写的业务方法都是面向对象来进行编码的,而channel底层传输的是字节,Netty通过定义encoder来完成对象到字节的转换。自己设置的encode可以通过继承MessageToByteEncoder(encoder也是ChannelHandler),下面是MessageToByteEncoder的解决流程。
匹配对象的细节如下:

分配ByteBuf内存:

HeadContext写入数据
我们知道通过channelHandle写入的数据最终会传入到HeadContext的write方法里,下面来看看HeadContext是如何解决这个过程的。
write过程
调用unsafe对象执行写入操作:

driect化ByteBuf并插入写队列

通过AbstractNioByteChannel类的filterOutboundMessage方法将byteBuf转成direct类型


通过ChannelOutboundBuffer类插入写队列

修改可写状态


flush过程
flsuh过程的入口

列新outboundBuffer的数据

调用channel的doWrite方法

调用jdk底层API进行自旋写



对ChannelOutboundBuffer缓存节点进行维护


总结:Netty的写入过程可以分为write与flush,通过ChannelOutboundBuffer对需要写入的数据进行缓存,在ChannelOutboundBuffer里,可以写入的数据都是direct类型的byteBuf。在默认情况下,假如有超过64Kb的数据没有flush,会通知channelHandler无法写入新的数据。
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Netty 编码与数据的写入
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Netty 编码与数据的写入