Pregunta

En Netty, ¿alguien sabe si el channelbuffer pasó a un controlador para un evento ascendente (después de lanzarlo de canalevent / o messageVent) será escrito simultáneamente por el marco Netty mientras lo procesa?

La guía del usuario y los ejemplos no aclaran explícitamente si esto sucederá o no.

Por ejemplo, imagine el método a continuación en una clase que extiende SimpleChannelHandler y está vinculado como el controlador en un servidor Netty:

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
{
  ChannelBuffer buffer = (ChannelBuffer) e.getMessage();

  if (buffer.readableBytes() == 4)
  {
    // Is it possible for the number of readable bytes to increase here?
  }
}

En el método anterior, ¿es posible que el número de bytes legibles aumente en la línea comentada (suponiendo que el cliente todavía envíe datos) o se garantizarán que esos cuadros sean mensajes separados y no se escriban en el búfer suministrado?

La razón por la que pregunto es saber si debo o no copiar el búfer a uno local antes de hacer parte de mi procesamiento, o si dicha copia es superflua.

¿Fue útil?

Solución

Una vez que Netty crea un ChannelBuffer y desencadena un MessageEvent Con él, está fuera de las manos de Netty y, por lo tanto, Netty no lo modifica de ninguna manera. Los manejadores u otro código de usuario pueden modificar el búfer, pero por lo general, los manejadores bien escritos no interfieren con otros manejadores. Si un controlador malo mantiene la referencia al búfer recibido y se modifica más tarde, sin embargo, verá el estado del búfer roto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top