7

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

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

我曾经在我的所有处理程序中使用 id() 进行日志记录(例如 System.out.println(ctx.channel().id() + " - readableBytes(): " + in.readableBytes()))。

我不能依赖 Channel 的 toString 方法,因为它可能会被覆盖。

4

2 回答 2

10

如果您确定通道处于活动状态,您可以通过组合 、 和 来生成通道的hashCode()唯一remoteAddress()ID localAddress()。或者,您可以简单地使用Channel.toString()which 从三个属性中生成一个字符串。如果通道还没有激活,remoteAddress()并且 localAddress()不会给出有意义的信息,那么你仍然有碰撞的风险。

Netty 4.1 和 5.0 重新引入Channel.id()ChannelId. 它使用 MAC 地址、当前 PID、时间戳和哈希码等各种信息,因此它甚至可以用作全球唯一 ID。检查Javadoc

于 2013-09-04T00:20:23.760 回答
1

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

于 2013-08-16T04:49:42.547 回答