Netty:如何在仍然支持本机套接字的同时添加 websocket 握手和成帧



对我来说,Netty 4 似乎没有开箱即用的混合 websocket/本机套接字支持。 我在我的服务器上使用自定义二进制协议,它应该在同一端口上同时支持本机和 websocket。这是我在ServerInitializer中尝试的内容:

@Override
public void initChannel(SocketChannel ch) {
System.out.println("channel initialized");
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(new HttpServerCodec());
pipeline.addLast(new HttpObjectAggregator(65536));
// client decoders cannot be singleton....
pipeline.addLast(new WebSocketDecoder(), new ClientCommandDecoder());
pipeline.addLast(this.webSocketEncoder, this.serverCommandEncoder);
pipeline.addLast(this.roomHandler);
}

WebSocketDecoder取自示例,但它似乎使用了一个握手器,它只处理FullHttpRequest,这是强制性的HttpObjectAggregator

但是,如果不是 HTTP 请求,则HttpServerCodecHttpObjectAggregator似乎都不会传递输入数据。所以这就是我想知道的:

  1. 我可以编写给定类的自定义实现并覆盖逻辑以传递输入数据(如果它不是 Web 套接字而是本机(
  2. 或者我可以以某种方式检测输入数据是否来自 websocket 并转向两个不同的流(一个支持 HTTP,另一个没有(

您需要根据您的输入动态调整管道。

请查看我们的移植统一示例...

最新更新