Channel.id() 已在 Netty 4.0.0.CR9 中删除。
这些天我如何获得频道的 ID?
我曾经在我的所有处理程序中使用 id() 进行日志记录(例如 System.out.println(ctx.channel().id() + " - readableBytes(): " + in.readableBytes()))。
我不能依赖 Channel 的 toString 方法,因为它可能会被覆盖。
Channel.id() 已在 Netty 4.0.0.CR9 中删除。
这些天我如何获得频道的 ID?
我曾经在我的所有处理程序中使用 id() 进行日志记录(例如 System.out.println(ctx.channel().id() + " - readableBytes(): " + in.readableBytes()))。
我不能依赖 Channel 的 toString 方法,因为它可能会被覆盖。
如果您确定通道处于活动状态,您可以通过组合 、 和 来生成通道的hashCode()
唯一remoteAddress()
ID localAddress()
。或者,您可以简单地使用Channel.toString()
which 从三个属性中生成一个字符串。如果通道还没有激活,remoteAddress()
并且 localAddress()
不会给出有意义的信息,那么你仍然有碰撞的风险。
Netty 4.1 和 5.0 重新引入Channel.id()
了ChannelId
. 它使用 MAC 地址、当前 PID、时间戳和哈希码等各种信息,因此它甚至可以用作全球唯一 ID。检查Javadoc。
您可以使用 Channel.hashCode() 。我们删除了 id() 因为不能保证它是 100% 唯一的。