Java 在两个网状通道之间传播背压
我想使用netty-4编写一个系统,其中服务器从一个通道(巧妙地称为in)接收请求,进行转换,并可能将结果放到另一个通道到另一个后端系统(称为out) 但是我想把背压从外通道传播到内通道?特别是因为netty API是异步的,当out不再被阻塞时,我如何得到通知;然后告诉他暂停/继续 部分解决方案 我相信您可以通过Java 在两个网状通道之间传播背压,java,netty,Java,Netty,我想使用netty-4编写一个系统,其中服务器从一个通道(巧妙地称为in)接收请求,进行转换,并可能将结果放到另一个通道到另一个后端系统(称为out) 但是我想把背压从外通道传播到内通道?特别是因为netty API是异步的,当out不再被阻塞时,我如何得到通知;然后告诉他暂停/继续 部分解决方案 我相信您可以通过channel.isWritable()判断out channel何时准备好写入 回答中提到禁用自动读取,但我认为我必须负责轮询通道的读取。我对此并不高兴,除非我能在准备阅读时收到一条
channel.isWritable()
判断out channel何时准备好写入
回答中提到禁用自动读取,但我认为我必须负责轮询通道的读取。我对此并不高兴,除非我能在准备阅读时收到一条信息。此时,使用netty的实用程序主要是无拷贝缓冲区和ByteToMessageDecoder超类。对,当输出不可写时,可以在输入通道上禁用自动读取,当输出准备就绪时,可以再次启用自动读取。
这里不需要轮询。要添加到Igor的答案中,您有几个选项可以重新激活读取。显示的第一个表示捕获目标通道上的channelWritabilityChanged事件。您可以检查通道的状态,并在源通道上启用自动读取 或者,代理示例显示将写入完成侦听器设置为写入和刷新。这种技术也可以工作,但没有利用Netty的高/低水位线排队系统,因为只有在写入被刷新到网络缓冲区后,您才会被告知写入完成