netty如何确定读取何时完成?

How does netty determine when a read is complete?

下面是回显服务器的ChannelHandler

Netty 框架将调用 channelReadComplete() 方法来通知处理程序对 channelRead() 的最后一次调用是当前批次中的最后一条消息。

我的问题是,由于数据是在中继线上传输的,Netty 如何知道 a batch of message 何时完成?

channelReadComplete() 一旦没有更多数据可从底层传输读取,就会被触发。在谈论 SocketChannels 时,这将是以下两种情况之一:

  1. 阅读(...) returns 0
  2. read(...) 得到了一个传递给它的缓冲区,该缓冲区有 1024 个字节要填充,但填充的字节数少于 1024 个。