对我来说,似乎没有为Netty 4提供混合websocket / native socket的开箱即用支持。我在我的服务器上使用自定义二进制协议,它应该支持同一端口上的native和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
s的握手,这使得HttpObjectAggregator
强制使用。
但是,HttpServerCodec
和HttpObjectAggregator
似乎都没有传递输入数据,如果它不是HTTP请求。所以这就是我想知道的: