Как отбросить перегруженные соединения в Netty 4


Используя Netty 4, Как я могу обнаружить, что данные, которые я пишу, засоряются на моей стороне соединения и закрыть соединение, если удаленный конец не может идти в ногу?

Я проверял, есть ли

ChannelHandlerContext.канал.outboundByteBuffer.readableBytes > MaxWriteBuffer

Но с последней версией Netty 4 это теперь дает мне исключение:

Java.яз..IllegalStateException: nextOutboundByteBuffer() вызывается из за пределами города eventLoop

1 2

1 ответ:

Вам нужно сделать это из EventLoop, так как в противном случае он не является потокобезопасным.

Итак, что-то вроде этого:

ChannelHandlerContext ctx = ....
final Channel channel = ctx.channel();
channel.eventLoop().execute(new Runnable() {
    public void run() {
        if (channel.outboundByteBuffer.readableBytes() > MaxWriteBuffer) {
            // do something
        }
    }
});