Как отбросить перегруженные соединения в Netty 4
Используя Netty 4, Как я могу обнаружить, что данные, которые я пишу, засоряются на моей стороне соединения и закрыть соединение, если удаленный конец не может идти в ногу?
Я проверял, есть ли
ChannelHandlerContext.канал.outboundByteBuffer.readableBytes > MaxWriteBuffer
Но с последней версией Netty 4 это теперь дает мне исключение:
Java.яз..IllegalStateException: nextOutboundByteBuffer() вызывается из за пределами города eventLoop
1 ответ:
Вам нужно сделать это из EventLoop, так как в противном случае он не является потокобезопасным.
Итак, что-то вроде этого:
ChannelHandlerContext ctx = .... final Channel channel = ctx.channel(); channel.eventLoop().execute(new Runnable() { public void run() { if (channel.outboundByteBuffer.readableBytes() > MaxWriteBuffer) { // do something } } });