Netty:如何在仍支持原生套接字

时间:2017-08-11 10:56:03

标签: websocket netty

对我来说,似乎没有为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强制使用。

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

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

1 个答案:

答案 0 :(得分:2)

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

请查看我们的PortUnification示例...