业务里的数据最终需要通过socket写回到客户端,我们写的业务方法都是面向对象来进行编码的,而channel底层传输的是字节,Netty通过定义encoder来完成对象到字节的转换。自定义的encode可以通过继承MessageToByteEncoder(encoder也是ChannelHandler),下面是MessageToByteEncoder的处理流程。
我们知道通过channelHandle写入的数据最终会传入到HeadContext的write方法里,下面来看看HeadContext是如何处理这个过程的。
总结:Netty的写入过程可以分为write与flush,通过ChannelOutboundBuffer对需要写入的数据进行缓存,在ChannelOutboundBuffer里,可以写入的数据都是direct类型的byteBuf。在默认情况下,如果有超过64Kb的数据没有flush,会通知channelHandler无法写入新的数据。