出于记录目的,我需要获取使用的监听器 ChannelID
并重写处理程序的 onDataRead
方法。
在入站日志中我看到了正确的 ID。 (见下文)。但是当我尝试像这样获取 id 时:
public void onDataRead(ChannelHandlerContext ctx, Http2DataFrame data) throws Exception {
if (data.isEndStream()) {
System.out.println(ctx.channel().id());
} }
这将打印另一个 ID,而不是下面我的日志中显示的 ID:
入站日志:
----------------INBOUND--------------------
[id: 0x73888d9b, L:/127.0.0.1:8080 - R:/127.0.0.1:6624] HEADERS: streamId=5, headers=DefaultHttp2Headers[:path: test/, :method: POST, :scheme: http, :authority: 127.0.0.1:8080, accept-encoding: gzip, accept-encoding: deflate], streamDependency=0, weight=16, exclusive=false, padding=0, endStream=false
------------------------------------
ChannelHandlerContext
中的 id 不同可能是什么原因?当入站日志中显示不同的 id 时?如何获得与入站日志中显示的相同的 id?
最佳答案
在阅读了几个小时的 javadoc 之后,我发现了以下方法来查找父 channel (及其 id)
ctx.channel().parent().id());
关于java - 如何在 CustomHandlers onDataRead 方法中检索主 ChannelID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36546635/