2012-04-13 9 views
5

Tengo un escenario en el que tengo que seguir escribiendo en Channel. En caso de que no pueda tomar más datos (debido a que los búferes están llenos, etc.), debo dejar de escribir, pero necesito reanudarlo tan pronto como el canal vuelva a ser editable. ¿Cómo determino este instante cuando un canal vuelve a ser editable? ¿Hay un evento de devolución de llamada que se dispara que puedo anular? Extiendo SimpleChannelUpstreamHandler en mi manejador de negocios - esto tiene un método channelInterestChanged() - pero no estoy seguro de si este es el gancho correcto para aprovechar?Channel.isWritable notofication en Netty

Esperaba evitar el uso de mecanismos de espera basados ​​en hilos primitivos como wait-notify, ya que implican el cambio de contexto. ¿Alguna forma de bloqueo para lograr esta espera?

Respuesta

7

Puede anular el método channelInterestChanged().

Algo así:

public class MyHandler extends SimpleChannelUpstreamHandler { 
    .... 

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

Esto debería hacer el trabajo

+0

¿Cuál es el más nuevo método en el 4.x Netty Netty –

+3

en 4.x es "channelWritabilityChanged (...)" –

Cuestiones relacionadas