2012-04-13 1 views
5

У меня есть сценарий, где мне нужно писать в Channel. Если он не может получить дополнительные данные (из-за того, что буферы заполнены и т. Д.), Мне нужно прекратить запись, но вам нужно возобновить работу, как только канал снова станет доступен для записи. Как определить этот момент, когда канал снова станет доступен для записи? Происходит ли событие обратного вызова, которое я могу переопределить? Я расширяю SimpleChannelUpstreamHandler в своем бизнес-обработчике - это имеет метод channelInterestChanged() - но не уверен, правильно ли это крючок?Channel.isWritable notofication в Netty

Я надеялся избежать использования примитивных механизмов ожидания на основе потоков, таких как wait-notify, поскольку они будут включать переключение контекста. Любой неблокирующий способ достичь этого ожидания?

ответ

7

Вы можете переопределить метод channelInterestChanged().

Нечто подобное:

public class MyHandler extends SimpleChannelUpstreamHandler { 
    .... 

    @Override 
    public void channelInterestChanged(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { 
     if (e.getChannel().isWritable() { 
      ..... 
     } 
    } 
} 

Это должно сделать работу

+0

Что такое новый метод в Нетти 4.x –

+3

в Нетти 4.x это "channelWritabilityChanged (...)" –