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

这些天我如何获得 channel 的 ID?

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

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

最佳答案

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

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

关于netty - 如何获取 Netty channel 的一些 ID?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18262926/

10-12 17:35