2013-02-14 6 views
5

Ich habe von Netty website auf dem Proxy-Server Beispiel sucht über:Ist der Netty-Handler für jede Verbindung eindeutig?

Die Codebeispiel Quelle Handler hat eine flüchtige Variable

private volatile Channel outboundChannel; 

die Pflege des Kanals nimmt, die für Proxy auf einen anderen Server verbindet.

Das hat mich gefragt, ob dies die richtige und sichere Methode für mehrere Verbindungen für Proxy zu implementieren ist.

Ich möchte mehrere Verbindungen (eingehend) erlauben, um zu verschiedenen Outbounds zu verbinden, während sichergestellt wird, dass jede eingehende Verbindung eindeutig mit dem Ausgangskanal verbunden ist.

Nach meinem Wissen erzeugt Netty eine neue Pipeline für jede Verbindung. Bedeutet dies, dass eine neu generierte Handler-Pipeline-Fabrik eindeutig der neuen Verbindung (dem Kanal) zugeordnet ist?

p.s. Wenn ich 1.000 aktive Verbindungen zu meinem Netty-Server habe, bedeutet das, dass es 1000 verschiedene Pipelines gibt?

Antwort

8

Es wird eine Pipeline pro Verbindung erstellt, die Pipeline kann jedoch sowohl gemeinsame als auch exklusive Handler enthalten. Einige Handler behalten den Status nicht und eine einzelne Instanz kann in mehrere [alle] Pipelines eingefügt werden. Netty zur Verfügung gestellte Handler, die geteilt werden können, sind mit ChannelHandler.Sharable annotiert. Siehe Abschnitt Geteilte und exklusive Kanalhandler in diesem tutorial.

+1

Richtig, aber wenn ich einen exklusiven Channel-Handler für jede Verbindung deklariere (also jede Pipeline), bedeutet das, dass der Channel-Handler nur für diese spezifische Verbindung bestimmt ist? – wns349

+1

Korrekt. Sie könnten einen gegebenen Handler als Sharable neu implementieren, indem Sie den gesamten Status in Anlagen oder ChannelLocals beibehalten. – Nicholas

+0

Ich mache mir Sorgen über das Problem der Ressourcenerfassung. Wie kann ich die Handler-Ressource nach der Verwendung freigeben? –

Verwandte Themen