Я работаю с Netty Channels и при отправке большого количества данных по каналу, я замечаю, что событие Channel.channelInterestChanged
уволено, что сразу приводит к Channel.isWritable()
, чтобы вернуть false. (Есть еще один поток, делающий Channel.write()
и этот поток не срабатывает немедленно). Мой вопрос: почему меняются интересы Канала? или, вернее, кто его меняет? Ничто в коде, который я написал (сервер или клиент), не меняет интереса.Channel.channelInterestChanged в Netty
ответ
Он изменяется, потому что вы записываете больше данных на канал, затем он может передавать в заданное время. Netty ставит в очередь данные для вас, пока не будет достигнуто какое-либо нарушение, как только он попадет. Channel.isWritable() вернет false.
Вам необходимо настроить writeBufferHighWaterMark и writeBufferLowWaterMark, если вы хотите изменить, сколько байт разрешено получать в очереди/буферизовать до того, как Channel.isWritable() вернет false.
ServerBootstrap sb = ....
sb.setOption("writeBufferHighWaterMark", ..);
sb.setOption("writeBufferLowWaterMark", ..);
В любом случае вы должны убедиться, что ваш код, который вызывает Channel.write (...) не проверяет Channel.isWritable() и только писать, если она возвращает истину. Проблема, которую вы часто наблюдаете в медленных сетях.
[1] http://netty.io/docs/stable/api/org/jboss/netty/channel/socket/nio/NioChannelConfig.html
, если канал не доступен для записи, что мы должны делать? – WorM
Остановить запись и продолжить, как только перезаписывается снова –
есть способ определить размер изменения размера окна на удаленном, используя netty? если есть, можем ли мы что-либо сделать на уровне приложения, чтобы отреагировать на это? – WorM