Политика сброса ограниченной очереди для клиента Netty - PullRequest
4 голосов
/ 07 декабря 2011

Нажав на OutMemoryError, подключаясь к стороннему серверу, который не может обработать запросы достаточно быстро.

Попытка NioClientSocketChannelFactory передать в службу executor ограниченную очередь и политику сброса (ThreadPoolExecutor.DiscardPolicy), но все еще получила OutOfMemoryError.

Чего мне не хватает?

Спасибо

1 Ответ

9 голосов
/ 07 декабря 2011

Если буфер записи на вашем клиентском канале Netty заполняется, а сервер недостаточно быстро его читает, вы увидите OutOfMemoryError на стороне клиента. Чтобы избежать этого, вы должны прекратить запись, если Channel.isWritable() возвращает false. Вы будете уведомлены о событии channelInterestOpsChanged при статусе Channel.writable' changes. Then, you can check again if Channel.isWritable () returns true` и продолжите писать.

Если все в порядке, чтобы отбросить ожидающие данные, я бы просто не позвонил Channel.write(), если Channel.isWritable() вернет false.

Вы можете настроить при изменении свойства Channel.writable свойства водяного знака, указанные в NioSocketChannelConfig. Кроме того, обратите внимание на пример сброса, который использует эту технику.

...