Domanda

In Netty, qualcuno sa se il ChannelBuffer passato a un gestore per un evento a monte (dopo lanci da ChannelEvent / o MessageEvent) saranno contemporaneamente scritta dal quadro Netty mentre si elabora esso?

Il manuale d'uso e gli esempi non esplicitamente chiarire se questo accadrà o meno.

Per esempio, immaginate il seguente metodo in una classe che estende SimpleChannelHandler ed è legato come il gestore su un server di 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?
  }
}

Nel metodo di cui sopra, è possibile che il numero di byte leggibili per aumentare sulla linea commentata (assumendo che il client è ancora inviando dati), o saranno quei fotogrammi essere garantita come messaggi separati e non scritta nel buffer in dotazione ?

Il motivo che mi chiedo è di sapere se o non dovrei copiare il buffer ad una locale prima di fare un po 'della mia trasformazione, o se tale copia è superfluo.

È stato utile?

Soluzione

Una volta Netty crea un ChannelBuffer e innesca una MessageEvent con esso, è dalle mani di Netty Netty e quindi non modifica con qualsiasi mezzo. I gestori o altro codice utente può modificare il buffer, ma solitamente, gestori ben scritti non interferire con altri gestori. Se un cattivo gestore mantiene il riferimento al buffer ricevuto e modifica in seguito, poi si vedrà stato cuscinetto rotto però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top