Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在两个网状通道之间传播背压_Java_Netty - Fatal编程技术网

Java 在两个网状通道之间传播背压

Java 在两个网状通道之间传播背压,java,netty,Java,Netty,我想使用netty-4编写一个系统,其中服务器从一个通道(巧妙地称为in)接收请求,进行转换,并可能将结果放到另一个通道到另一个后端系统(称为out) 但是我想把背压从外通道传播到内通道?特别是因为netty API是异步的,当out不再被阻塞时,我如何得到通知;然后告诉他暂停/继续 部分解决方案 我相信您可以通过channel.isWritable()判断out channel何时准备好写入 回答中提到禁用自动读取,但我认为我必须负责轮询通道的读取。我对此并不高兴,除非我能在准备阅读时收到一条

我想使用netty-4编写一个系统,其中服务器从一个通道(巧妙地称为in)接收请求,进行转换,并可能将结果放到另一个通道到另一个后端系统(称为out)

但是我想把背压从外通道传播到内通道?特别是因为netty API是异步的,当out不再被阻塞时,我如何得到通知;然后告诉他暂停/继续

部分解决方案

我相信您可以通过
channel.isWritable()
判断out channel何时准备好写入


回答中提到禁用自动读取,但我认为我必须负责轮询通道的读取。我对此并不高兴,除非我能在准备阅读时收到一条信息。此时,使用netty的实用程序主要是无拷贝缓冲区和ByteToMessageDecoder超类。

对,当输出不可写时,可以在输入通道上禁用自动读取,当输出准备就绪时,可以再次启用自动读取。
这里不需要轮询。

要添加到Igor的答案中,您有几个选项可以重新激活读取。显示的第一个表示捕获目标通道上的channelWritabilityChanged事件。您可以检查通道的状态,并在源通道上启用自动读取

或者,代理示例显示将写入完成侦听器设置为写入和刷新。这种技术也可以工作,但没有利用Netty的高/低水位线排队系统,因为只有在写入被刷新到网络缓冲区后,您才会被告知写入完成