Netty 如何获取网络频道的ID?

Netty 如何获取网络频道的ID?,netty,Netty,Channel.id()已在Netty 4.0.0.CR9中删除 这些天我如何获得频道的ID 我以前在所有处理程序中都使用id()进行日志记录(例如,System.out.println(ctx.channel().id()+“-readableBytes():“+in.readableBytes())) 我不能依赖通道的toString方法,因为它可能被重写。您可以使用Channel.hashCode()。我们删除了id(),因为无法保证它是100%唯一的。如果您确定频道处于活动状态,可以通过

Channel.id()已在Netty 4.0.0.CR9中删除

这些天我如何获得频道的ID

我以前在所有处理程序中都使用id()进行日志记录(例如,System.out.println(ctx.channel().id()+“-readableBytes():“+in.readableBytes()))


我不能依赖通道的toString方法,因为它可能被重写。

您可以使用Channel.hashCode()。我们删除了id(),因为无法保证它是100%唯一的。

如果您确定频道处于活动状态,可以通过组合
hashCode()
remoteAddress()
localAddress()
来生成频道的唯一id。或者,您可以简单地使用
Channel.toString()
,它从三个属性生成一个字符串。如果频道尚未激活,
remoteAddress()
localAddress()
将不会提供有意义的信息,因此您仍有发生冲突的风险


Netty 4.1和5.0重新引入了
Channel.id()
,它返回一个名为
ChannelId
的新类型。它使用各种信息,如MAC地址、当前PID、时间戳和哈希代码,因此它甚至可以用作全局唯一ID。检查。

哈希代码也不能保证返回唯一值,是吗?
hashcode()
不能保证返回唯一值。我仍然建议使用
Channel.toString()
。所有
Channel
实现实际上都依赖于
AbstractChannel.toString()
@trustin:toString方法包含远程地址,使其唯一。你能把这个作为答案吗?我将研究一旦我找到时间,您就无法检索远程地址的情况。@AndrewBourgeois答案已更新。谢谢你的反馈。这是最完整的答案。Netty 4不再拥有它,但你可以通过组合东西获得它,Netty 5将再次拥有它。谢谢。Netty 4.1也有它。请小心使用Channel.toString作为id,因为当频道处于非活动状态时,它会发生变化