Frage

Weiß jemand in Netty, ob der ChannelBuffer für ein Upstream -Ereignis an einen Handler überging (nachdem Sie ihn von ChannelEvent / oder MessageEvent gegossen haben), wird gleichzeitig durch das Netty -Framework geschrieben, während Sie es verarbeiten?

Der Benutzerhandbuch und die Beispiele werden nicht explizit klarstellen, ob dies geschehen wird oder nicht.

Stellen Sie sich beispielsweise die nachstehende Methode in einer Klasse vor, die simplechannelHandler erweitert und als Handler auf einem Netty -Server gebunden ist:

@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?
  }
}

Ist es in der obigen Methode möglich, dass die Anzahl der lesbaren Bytes in der kommentierten Zeile erhöht wird (vorausgesetzt, der Client sendet weiterhin Daten), oder es wird diese Frames garantiert als separate Nachrichten und nicht in den angegebenen Puffer geschrieben?

Der Grund, warum ich frage, ist zu wissen, ob ich den Puffer in einen lokalen kopieren sollte oder nicht, bevor ich einen Teil meiner Verarbeitung durchführt oder ob eine solche Kopie überflüssig ist.

War es hilfreich?

Lösung

Sobald Netty a schafft ChannelBuffer und löst a MessageEvent Damit ist es nicht aus Netty's Händen und Netty ändert es also keineswegs. Die Handler oder ein anderer Benutzercode können den Puffer ändern, aber in der Regel stören gut geschriebene Handler nicht andere Handler. Wenn ein schlechter Handler den Verweis auf den empfangenen Puffer beibehält und später ändert, sehen Sie jedoch den gebrochenen Pufferstatus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top