Где данные будут поставлены в очередь, если канал Netty isWritable возвращает false - PullRequest
0 голосов
/ 18 декабря 2018

Из API Netty показывает, что запрос будет поставлен в очередь, если isWritable вернет false.Могу ли я знать, где запрос будет поставлен в очередь?В каком случае очередь может быть переполнена и вызвать проблему OOM?

Ниже приведен документ для isWritable ()

Возвращает true, если и только если поток ввода-вывода выполнит запрошенную записьОперация немедленно.Любые запросы записи, сделанные, когда этот метод возвращает false, ставятся в очередь, пока поток ввода-вывода не будет готов обработать поставленные в очередь запросы записи.

https://netty.io/4.1/api/io/netty/channel/Channel.html#isWritable--

1 Ответ

0 голосов
/ 18 декабря 2018

Он будет поставлен в очередь во внутреннем буфере, поддерживаемом netty.Чтобы система не работала с OOM, вам придется переопределить метод channelWritabilityChanged из ChannelInboundHandler и выполнить обработку обратного давления.

Здесь вы можете замедлить чтение входящих данных, используя конфигурацию autoread для channel, и вручную прочитать запрос, как описано здесь .Или, если вы пишете в другом потоке, вам может потребоваться заблокировать этот поток.

...