Websocket Netty ChannelHandlerContext不是唯一的?
我已经使用Netty有一段时间了,但主要用于使用普通套接字,因为它们的通道总是唯一的,因此我可以映射通道以了解谁正在连接到我的服务器 现在我已经成功地实现了http通信。问题是ChannelHandlerContext处理程序的值(以及这些处理程序中的任何一个通道)都不是唯一的,我无法检测谁仅仅通过它们的处理程序进行连接 问题:Websocket Netty ChannelHandlerContext不是唯一的?,websocket,server,netty,Websocket,Server,Netty,我已经使用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 {
...
}
}