2013-08-15 16 views
5

Kanał.id() został usunięty w Netty 4.0.0.CR9.Skąd pobrać identyfikator sieci Netty?

W jaki sposób mogę uzyskać identyfikator kanału?

Używałam id() do celów logowania we wszystkich moich Handlerach (np. System.out.println (ctx.channel(). Id() + "- readableBytes():" + in.readableBytes())).

Nie mogę polegać na metodzie toString kanału, ponieważ może to być przesłonięte.

Odpowiedz

9

Jeżeli jesteś pewien, że kanał jest aktywny, można wygenerować unikalny identyfikator kanału łącząc hashCode(), remoteAddress() i localAddress(). Alternatywnie można po prostu użyć Channel.toString(), która generuje ciąg z trzech właściwości. Jeśli kanał nie jest jeszcze aktywny, remoteAddress() i localAddress() nie podadzą istotnych informacji, więc nadal istnieje ryzyko kolizji.

Netty 4.1 i 5.0 ponownie wprowadzono Channel.id(), który zwraca nowy typ o nazwie ChannelId. Korzysta z różnych informacji, takich jak adres MAC, aktualny PID, znacznik czasu i kod skrótu, dzięki czemu można go używać nawet jako unikalny identyfikator globalny. Sprawdź Javadoc.

+0

To jest najbardziej kompletna odpowiedź. Netty 4 już go nie ma, ale możesz go zdobyć, łącząc różne rzeczy, a Netty 5 znów je dostanie. Dzięki. – AndrewBourgeois

+0

Netty 4.1 również go ma. – trustin

+1

Należy zachować ostrożność podczas używania Channel.toString jako identyfikatora, ponieważ zmienia się on, gdy kanał staje się nieaktywny. https://github.com/netty/netty/blob/4.0/transport/src/main/java/io/netty/channel /AbstractChannel.java#L352 – justinjhendrick

1

Można użyć Channel.hashCode(). Usunęliśmy id(), ponieważ nie zostało zagwarantowane, aby było w 100% unikalne.

+0

hashCode nie może zwrócić unikalnej wartości, prawda? – AndrewBourgeois

+0

'hashCode()' nie ma gwarancji, że zwróci unikalną wartość. Wciąż zalecałbym używanie 'Channel.toString()'. Wszystkie implementacje 'Channel' w rzeczywistości opierają się na' AbstractChannel.toString() '. – trustin

+0

@trustin: metoda toString zawiera adres zdalny, dzięki czemu jest unikalny. Czy możesz to opublikować jako odpowiedź? Przyjrzę się przypadkom, w których nie można odzyskać zdalnego adresu, gdy znajdę jakiś czas. – AndrewBourgeois

Powiązane problemy