Netty客户端限制了队列丢弃策略

use*_*024 4 netty

遇到连接到第三方服务器的OutMemoryError,它无法足够快地处理请求.

尝试使用有界队列和丢弃策略(ThreadPoolExecutor.DiscardPolicy)传递NioClientSocketChannelFactory以执行服务器,但仍然得到OutOfMemoryError.

我错过了什么?

谢谢

tru*_*tin 9

如果您的客户端Netty通道的写缓冲区已满,并且服务器没有足够快地读取它,您将OutOfMemoryError在客户端看到.为了避免这种情况,你必须在Channel.isWritable()返回时停止写作false.channelInterestOpsChangedChannel.writable' changes. Then, you can check again ifChannel.isWritable()的状态为returns真时,您将收到有关事件的通知并继续写入.

如果可以丢弃待处理的数据,我就不会Channel.write()Channel.isWritable()返回时调用false.

您可以使用Channel.writable提供的水印属性配置属性更改的时间NioSocketChannelConfig.另外,请查看使用此技术的'discard'示例.