Netty ChannelHandlerContext 不是唯一的?
Netty ChannelHandlerContext not unique?
我使用 Netty 有一段时间了,但主要是为了使用普通套接字,因为它们的通道总是唯一的,因此我可以映射通道以了解谁在连接到我的服务器。
现在我成功实现了http通信。问题是 ChannelHandlerContext 处理程序(以及来自这些处理程序的任一通道)的值不是唯一的,我无法仅通过它们的处理程序检测到谁在连接。
问题:
是那种行为(ChannelHandlerContext 处理程序值不是
唯一)正常还是我的代码有一些错误?
任何想法,解决方案?
非常感谢
我的 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 {
...
}
}
在做http协议时,一个连接是可以复用的,也就是说1个连接可以处理多个请求。你不应该连接的原则是你的游戏的人,但你应该在你的协议中使用 cookies 或某种访问令牌。
正常情况下,浏览器最多会保持2个连接到同一个ip。
我使用 Netty 有一段时间了,但主要是为了使用普通套接字,因为它们的通道总是唯一的,因此我可以映射通道以了解谁在连接到我的服务器。
现在我成功实现了http通信。问题是 ChannelHandlerContext 处理程序(以及来自这些处理程序的任一通道)的值不是唯一的,我无法仅通过它们的处理程序检测到谁在连接。
问题:
是那种行为(ChannelHandlerContext 处理程序值不是 唯一)正常还是我的代码有一些错误?
任何想法,解决方案?
非常感谢
我的 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 {
...
}
}
在做http协议时,一个连接是可以复用的,也就是说1个连接可以处理多个请求。你不应该连接的原则是你的游戏的人,但你应该在你的协议中使用 cookies 或某种访问令牌。
正常情况下,浏览器最多会保持2个连接到同一个ip。