我想使用netty-4编写一个系统,其中服务器接收来自一个通道的请求(巧妙地配音为in),进行转换,并可能将结果放到另一个后端系统(称为out)。
但是我想把反压力从外通道传播到内部通道?具体来说--因为netty API是异步的--当out不再被阻塞时,如何通知我;告诉我暂停/恢复?
部分解
我相信可以知道什么时候out频道准备好用channel.isWritable()写了。
this question的一个答案提到禁用AUTO_READ,但我认为我必须负责轮询通道的读取。我对此不高兴--除非我能在阅读的时候收到一条信息。此时,使用netty的实用程序主要是无副本缓冲区和ByteToMessageDecoder超类。
发布于 2013-11-04 13:05:07
添加到Igor的答案-您有几个选项,以重新激活读。第一个,如图所示,here意味着捕获目标通道上的channelWritabilityChanged事件。您可以检查通道的状态,并在源通道上启用自动读取。
或者,代理示例显示了将写完成监听器设置为写和刷新。此技术也有效,但没有利用Netty的高/低水标排队系统,因为只有当写入被刷新到网络缓冲区时,才会被告知写入已经完成。
发布于 2013-11-03 05:35:18
对,当OUT不可写时,您可以在IN通道上禁用AUTO_READ,并在OUT准备就绪时再次启用AUTO_READ。这里不需要投票。
https://stackoverflow.com/questions/19747826
复制相似问题