Websocket Netty ChannelHandlerContext不是唯一的?

Websocket Netty ChannelHandlerContext不是唯一的?,websocket,server,netty,Websocket,Server,Netty,我已经使用Netty有一段时间了,但主要用于使用普通套接字,因为它们的通道总是唯一的,因此我可以映射通道以了解谁正在连接到我的服务器 现在我已经成功地实现了http通信。问题是ChannelHandlerContext处理程序的值(以及这些处理程序中的任何一个通道)都不是唯一的,我无法检测谁仅仅通过它们的处理程序进行连接 问题: 这种行为(ChannelHandlerContext处理程序值)不正确吗 唯一)正常还是我的代码中有一些bug 有什么想法,解决办法吗 非常感谢 我的通道初始值设定项如

我已经使用Netty有一段时间了,但主要用于使用普通套接字,因为它们的通道总是唯一的,因此我可以映射通道以了解谁正在连接到我的服务器

现在我已经成功地实现了http通信。问题是ChannelHandlerContext处理程序的值(以及这些处理程序中的任何一个通道)都不是唯一的,我无法检测谁仅仅通过它们的处理程序进行连接

问题:

  • 这种行为(ChannelHandlerContext处理程序值)不正确吗 唯一)正常还是我的代码中有一些bug

  • 有什么想法,解决办法吗

  • 非常感谢

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

    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());
       }
    }
    
    公共类NettyHttpServerInitializer扩展了ChannelInitializer{
    @凌驾
    public void initChannel(SocketChannel ch)引发异常{
    ChannelPipeline=通道管道();
    addLast(“http”,新的HttpServerCodec());
    pipeline.addLast(“dechunker”,新的HttpObjectAggregator(65536));
    addLast(“handler”,新的HttpServerHandler());
    }
    }
    
    我的服务器处理程序看起来像(ctx和ctx.channel()的值不是唯一的,即使是从同一个客户端触发):

    公共类HttpServerHandler扩展了SimpleChannelInboundHandler{
    @凌驾
    受保护的void messageReceived(ChannelHandlerContext ctx,FullHttpRequest msg)引发异常{
    ...
    }
    }
    
    制定http协议时,可以重用一个连接,这意味着一个连接可以处理多个请求。你不应该认为连接的原则是游戏中的一个人,但你应该在协议中使用cookie或某种访问令牌


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

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

    在正常情况下,浏览器将保持最多2个到同一ip的连接

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