Netty ChannelHandlerContext不是唯一的吗?

时间:2016-01-31 11:46:50

标签: websocket server netty

我一直在使用Netty,但主要是因为当他们的频道总是唯一时使用普通套接字,因此我可以映射频道以了解谁连接到我的服务器。

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

问题:

  1. 是否存在该行为(ChannelHandlerContext处理程序值不是 正常或我在代码中有一些错误吗?

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

  3. 非常感谢

    我的ChannelInitializer如下所示:

    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 {
            ...
        }
    }
    

1 个答案:

答案 0 :(得分:3)

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

在正常情况下,浏览器最多只能保留2个连接到同一个ip。