Netty ChannelHandlerContext 不是唯一的



我已经使用 Netty 一段时间了,但主要用于在通道始终唯一时使用普通套接字,因此我可以映射通道以了解谁连接到我的服务器。

现在我已经设法实现了http通信。问题是 ChannelHandlerContext 处理程序(以及来自这些处理程序的任一通道)的值不是唯一的,我无法检测到谁只是通过他们的处理程序进行连接。

问题:

  1. 是这种行为(通道处理程序上下文处理程序值不是唯一)正常还是我在代码中有一些错误?

  2. 任何想法,解决方案?

非常感谢

我的通道初始值设定项如下所示:

public class NettyHttpServerInitializer extends ChannelInitializer<SocketChannel> {
    @Override
    public void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
        pipeline.addLast("http", new HttpServerCodec()));
        pipeline.addLast("dechunker", new HttpObjectAggregator(65536)); 
        pipeline.addLast("handler", new HttpServerHandler());
   }
}

我的服务器处理程序看起来像(ctx 和 ctx.channel() 的值不是唯一的,即使从同一个客户端跳闸):

public class HttpServerHandler extends SimpleChannelInboundHandler<FullHttpRequest> {
    @Override
    protected void messageReceived(ChannelHandlerContext ctx, FullHttpRequest msg) throws Exception {
        ...
    }
}

在制作 http 协议时,可以重用一个连接,这意味着 1 个连接可以处理多个请求。您不应该是连接的原则是游戏的人,但您应该在协议中使用 cookie 或某种访问令牌。

在正常情况下,浏览器最多会保持 2 个连接到同一 IP。

相关内容

  • 没有找到相关文章

最新更新