2012-04-12 3 views
2

Я работаю с Netty Channels и при отправке большого количества данных по каналу, я замечаю, что событие Channel.channelInterestChanged уволено, что сразу приводит к Channel.isWritable(), чтобы вернуть false. (Есть еще один поток, делающий Channel.write() и этот поток не срабатывает немедленно). Мой вопрос: почему меняются интересы Канала? или, вернее, кто его меняет? Ничто в коде, который я написал (сервер или клиент), не меняет интереса.Channel.channelInterestChanged в Netty

ответ

3

Он изменяется, потому что вы записываете больше данных на канал, затем он может передавать в заданное время. 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

+0

, если канал не доступен для записи, что мы должны делать? – WorM

+0

Остановить запись и продолжить, как только перезаписывается снова –

+0

есть способ определить размер изменения размера окна на удаленном, используя netty? если есть, можем ли мы что-либо сделать на уровне приложения, чтобы отреагировать на это? – WorM

Смежные вопросы