как закрыть канал для записи - PullRequest
       16

как закрыть канал для записи

1 голос
/ 21 сентября 2011

Мы используем версию Netty 3.2.3 и хотим закрыть канал от записи в соответствии с определенным расчетом.

Мы закрываем канал на:

channel.setInterestOps(channel.getInterestOps() | Channel.OP_WRITE);

и повторное открытие:

channel.setInterestOps(channel.getInterestOps() & Channel.OP_WRITE);

Но по производительности что-то не так. расчет такой же, как мы делаем serReadable true / false, это работает нормально.

1 Ответ

1 голос
/ 07 ноября 2011

Channel.OP_WRITE только для информации. Netty использует его, чтобы указать, может ли поток ввода-вывода немедленно записать данные в канал. Если channel.isWritable () имеет значение false, Netty будет помещать в очередь любые дальнейшие данные, пока они не будут приняты каналом. Если вы продолжаете записывать данные, когда isWritable () имеет значение false, то в конечном итоге вы можете столкнуться с OutOfMemoryError.

Полагаю, вы не хотите на самом деле закрывать канал, просто перестаньте писать в него. Правильный подход заключается в том, чтобы либо проверять channel.isWritable () после каждой отправки, либо получать ChannelStateEvent (возможно, путем переопределения SimpleChannelUpstreamHandler.channelInterestChanged ()) и приостанавливать любой процесс приложения, который записывает данные в канал.

В любом случае вы захотите получить ChannelStateEvent, чтобы знать, когда вы сможете снова начать запись на канал.

...