2013-08-15 21 views
5

Channel.id(), Netty 4.0.0.CR9 dosyasında kaldırılmıştır.Netty Kanalı için bazı kimlikler nasıl alınır?

Bu günlerde Kanal kimliğini nasıl alabilirim?

Tüm İşleyicilerimde (örneğin, System.out.println (ctx.channel(). Id() + "- readableBytes():" + in.readableBytes()) için günlüğe kaydetme amacıyla id() işlevini kullandım)).

Kanalın toString yöntemine güvenemiyorum, çünkü bu geçersiz kılınmış olabilir.

cevap

9

Kanalın etkin olduğundan eminseniz, kanalın benzersiz kimliğini hashCode(), remoteAddress() ve localAddress() ile birleştirerek oluşturabilirsiniz. Alternatif olarak, üç özellikten bir dize oluşturan Channel.toString()'u kullanabilirsiniz. Kanal henüz aktif değilse, remoteAddress() ve localAddress() anlamlı bilgiler vermeyecektir, bu yüzden hala çarpışma riski altındasınız.

Netty 4.1 ve 5.0 yeniden tanıtıldı Channel.id(), ChannelId adlı yeni bir tür döndürür. MAC adresi, geçerli PID, zaman damgası ve hashcode gibi çeşitli bilgileri kullanır, böylece global olarak benzersiz bir kimlik olarak bile kullanılabilir. Javadoc'u kontrol edin.

+0

Bu en eksiksiz cevaptır. Netty 4 artık sahip değil ama bunları birleştirerek alabilirsiniz, ve Netty 5 tekrar alacak. Teşekkürler. – AndrewBourgeois

+0

Netty 4.1 de buna sahip. – trustin

+1

Kanal.olString'in bir kimlik olarak kullanılmasına dikkat edin, çünkü kanal etkin olmadığında değişir. https://github.com/netty/netty/blob/4.0/transport/src/main/java/io/netty/channel /AbstractChannel.java#L352 – justinjhendrick

1

Channel.hashCode() öğesini kullanabilirsiniz. % 100 benzersiz olması garanti edilmediğinden id() öğesini kaldırdık.

+0

hashCode benzersiz bir değer döndürmeyi garanti etmiyor, değil mi? – AndrewBourgeois

+0

'hashCode()' benzersiz bir değer döndürmeyi garanti etmemektedir. 'Channel.toString() 'özelliğini kullanmanızı öneririz. Tüm 'Kanal' uygulamaları aslında 'AbstractChannel.toString()' ye güvenir. – trustin

+0

@trustin: toString yöntemi uzak adresi içererek benzersiz kılar. Bunu cevap olarak gönderebilir misin? Bir süre bulduktan sonra uzak adresi alamayacağınız vakalara bakacağım. – AndrewBourgeois