Netty 如何检测对通道的读取或写入结束

Netty 如何检测对通道的读取或写入结束,netty,Netty,我正在开发一个负载平衡器,我正在尝试将Netty源中代理的基本功能作为我的出发点 我试图对这个示例所做的更改,但遇到的困难是如何检测请求或响应的结束 我不想在连接的整个生命周期内将客户机固定到特定的服务器上,我想将每个请求分发到不同的服务器上。但这似乎是不可能的,因为不清楚如何判断请求/响应是否完成 由于请求可以在多次读取中分解,我无法将每次读取的有效负载分配到不同的服务器,原因很明显。服务器返回的响应也是如此,我不知道何时完成,所以我不知道何时可以释放客户端和特定服务器之间的链接 如果我从未发

我正在开发一个负载平衡器,我正在尝试将Netty源中代理的基本功能作为我的出发点

我试图对这个示例所做的更改,但遇到的困难是如何检测请求或响应的结束

我不想在连接的整个生命周期内将客户机固定到特定的服务器上,我想将每个请求分发到不同的服务器上。但这似乎是不可能的,因为不清楚如何判断请求/响应是否完成

由于请求可以在多次读取中分解,我无法将每次读取的有效负载分配到不同的服务器,原因很明显。服务器返回的响应也是如此,我不知道何时完成,所以我不知道何时可以释放客户端和特定服务器之间的链接

如果我从未发送过大的请求或响应,以至于它们从来不会超过一次读写,那么我的代码就会完全按照设计工作,但一旦它们被分解成多条消息,我就会开始出现问题

我曾希望可以使用活动/非活动或注册/取消注册事件,但由于客户端将为后续交互保持连接打开,因此这似乎不是一个选项


此外,平衡器在多协议请求/响应周期中工作,因此我不能只检查LastHttpContent消息作为流完成的指示器。

如果我在通道上调用read,我得到了一个
channelReadComplete
,没有相应的
channelRead
,没有更多的数据可以读取?也就是说,当从侦听器内部调用
ctx.channel().read()
时,将
channelReadComplete
添加到
hextdumpproxybackendhandler
,如果下一个事件是
channelReadComplete
而不是
channelRead
,我完成了吗?答案是否定的,这只是使用模式的一个怪现象。简单地给出一系列
ByteBuf
对象,这似乎是不可能的