使用 Netty 4,如果远程端跟不上,我如何检测我写入的数据在我的连接一侧被阻塞并关闭连接?
我在检查是否
ChannelHandlerContext.channel.outboundByteBuffer.readableBytes > MaxWriteBuffer
但是对于最新的 Netty 4 版本,这给了我一个例外:
java.lang.IllegalStateException:从 eventLoop 外部调用的 nextOutboundByteBuffer()
使用 Netty 4,如果远程端跟不上,我如何检测我写入的数据在我的连接一侧被阻塞并关闭连接?
我在检查是否
ChannelHandlerContext.channel.outboundByteBuffer.readableBytes > MaxWriteBuffer
但是对于最新的 Netty 4 版本,这给了我一个例外:
java.lang.IllegalStateException:从 eventLoop 外部调用的 nextOutboundByteBuffer()
您需要从 EventLoop 执行此操作,否则它不是线程安全的。
所以是这样的:
ChannelHandlerContext ctx = ....
final Channel channel = ctx.channel();
channel.eventLoop().execute(new Runnable() {
public void run() {
if (channel.outboundByteBuffer.readableBytes() > MaxWriteBuffer) {
// do something
}
}
});