2013-08-15 10 views
5

Channel.id() è stato rimosso in Netty 4.0.0.CR9.Come ottenere un ID per un canale Netty?

Come ottengo un ID di un canale in questi giorni?

Ho usato l'id() per la registrazione in tutti i miei gestori (ad esempio System.out.println (ctx.channel(). Id() + "- readableBytes():" + in.readableBytes())).

Non posso fare affidamento sul metodo toString di un canale perché potrebbe essere sovrascritto.

risposta

9

Se si è certi che il canale sia attivo, è possibile generare l'ID univoco del canale combinando lo hashCode(), remoteAddress() e localAddress(). In alternativa, puoi semplicemente usare Channel.toString() che genera una stringa dalle tre proprietà. Se il canale non è ancora attivo, remoteAddress() e localAddress() non daranno informazioni significative, quindi sei ancora a rischio di collisione.

Netty 4.1 e 5.0 reintrodotto Channel.id(), che restituisce un nuovo tipo denominato ChannelId. Utilizza varie informazioni come l'indirizzo MAC, il PID corrente, il timestamp e l'hashcode, in modo che possa essere utilizzato anche come ID univoco globale. Controlla il Javadoc.

+0

Questa è la risposta più completa. Netty 4 non ce l'ha più ma puoi ottenerlo unendo cose e Netty 5 lo riavrà. Grazie. – AndrewBourgeois

+0

Anche Netty 4.1 ce l'ha. – trustin

+1

Fai attenzione quando usi Channel.toString come ID perché cambia quando il canale diventa inattivo https://github.com/netty/netty/blob/4.0/transport/src/main/java/io/netty/channel /AbstractChannel.java#L352 – justinjhendrick

1

È possibile utilizzare Channel.hashCode(). Abbiamo rimosso id() perché non era garantito per essere unico al 100%.

+0

hashCode non è garantito per restituire un valore univoco, vero? – AndrewBourgeois

+0

'hashCode()' non è garantito per restituire un valore univoco. Mi raccomando comunque di usare 'Channel.toString()'. Tutte le implementazioni di 'Channel' si basano effettivamente su' AbstractChannel.toString() '. – trustin

+0

@trustin: il metodo toString contiene l'indirizzo remoto, rendendolo univoco. Puoi postarlo come risposta? Vedrò i casi in cui non è possibile recuperare l'indirizzo remoto una volta che ho trovato un po 'di tempo. – AndrewBourgeois

Problemi correlati