2013-02-14 3 views
5

Ho cercato sopra l'esempio server proxy da Netty website:Il gestore di Netty è univoco per ogni connessione?

Il gestore di codice sorgente di esempio ha una variabile volatile,

private volatile Channel outboundChannel; 

che si prende cura del canale che si connette a un altro server per il proxy.

Questo mi ha portato a chiedermi se questo è il modo corretto e sicuro per implementare connessioni multiple per proxy.

Vorrei consentire a più connessioni (in entrata) di connettersi a diversi outbound, assicurandomi che ogni connessione in entrata sia collegata in modo univoco al canale in uscita.

Secondo le mie conoscenze, Netty genera una nuova pipeline per ogni connessione. Questo significa che un gestore appena generato dalla fabbrica di pipeline è dedicato esclusivamente alla nuova connessione (canale)?

p.s. Se ho 1.000 connessioni attive sul mio server Netty, significa che ci sono 1.000 pipeline diverse?

risposta

8

C'è una pipeline creata per connessione, ma la pipeline può contenere gestori condivisi ed esclusivi. Alcuni gestori non mantengono lo stato e una singola istanza può essere inserita in più [tutti] pipeline. I gestori forniti da Netty che possono essere condivisi sono annotati con ChannelHandler.Sharable. Vedere la sezione intitolata Gestori canale condivisi ed esclusivi in questo tutorial.

+1

Giusto, ma se dichiaro un gestore di canale esclusivo per ogni connessione (vale a dire ogni pipeline), significa che il gestore di canale è dedicato solo a quella specifica connessione? – wns349

+1

corretto. È possibile reimplementare un determinato gestore per essere condivisibile mantenendo tutto lo stato negli allegati o ChannelLocals. – Nicholas

+0

Mi preoccupo per il problema di raccolta delle risorse. Come posso rilasciare la risorsa del gestore dopo l'uso? –