Netty 禁用HttpClientCodec以添加和编码其他数据

Netty 禁用HttpClientCodec以添加和编码其他数据,netty,Netty,我尝试与另一个WebsocketServer通信,该服务器需要以如下形式获取其消息: [字节[]控制字节,数据] 例如,有效的传入消息如下所示: +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+---------------------------------------------

我尝试与另一个WebsocketServer通信,该服务器需要以如下形式获取其消息: [字节[]控制字节,数据] 例如,有效的传入消息如下所示:

         +-------------------------------------------------+
         |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
+--------+-------------------------------------------------+----------------+
|00000000| 01 7b 22 63 6f 6e 6e 65 63 74 69 6f 6e 48 65 6c |.{"connectionHel|
|00000010| 6c 6f 22 3a 5b 7b 22 70 68 61 73 65 22 3a 22 72 |lo":[{"phase":"r|
|00000020| 65 61 64 79 22 7d 2c 7b 22 77 61 69 74 69 6e 67 |eady"},{"waiting|
|00000030| 22 3a 36 30 30 30 30 7d 5d 7d                   |":60000}]}      |
+--------+-------------------------------------------------+----------------+
当我尝试发送响应时,它会像这样改变。 在进入HttpClientCodec之前:

         +-------------------------------------------------+
         |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
+--------+-------------------------------------------------+----------------+
|00000000| 00 01 7b 22 63 6f 6e 6e 65 63 74 69 6f 6e 48 65 |..{"connectionHe|
|00000010| 6c 6c 6f 22 3a 5b 7b 22 70 68 61 73 65 22 3a 22 |llo":[{"phase":"|
|00000020| 72 65 61 64 79 22 7d 2c 7b 22 77 61 69 74 69 6e |ready"},{"waitin|
|00000030| 67 22 3a 36 30 30 30 30 7d 5d 7d                |g":60000}]}     |
+--------+-------------------------------------------------+----------------+
HttpClientCodec处理消息后:

         +-------------------------------------------------+
         |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
+--------+-------------------------------------------------+----------------+
|00000000| 82 bb 2f df ee 2e 2f de 95 0c 4c b0 80 40 4a bc |../.../...L..@J.|
|00000010| 9a 47 40 b1 a6 4b 43 b3 81 0c 15 84 95 0c 5f b7 |.G@..KC......._.|
|00000020| 8f 5d 4a fd d4 0c 5d ba 8f 4a 56 fd 93 02 54 fd |.]J...]..JV...T.|
|00000030| 99 4f 46 ab 87 40 48 fd d4 18 1f ef de 1e 52 82 |.OF..@H.......R.|
|00000040| 93                                              |.               |
+--------+-------------------------------------------------+----------------+
不知道这是否有帮助,但我是这样配置管道的:

p.addLast(ClientSslHandler);
p.addLast(
          new LoggingHandler(LogLevel.INFO), 
          new HttpClientCodec
          new LoggingHandler(LogLevel.INFO),
          new HttpObjectAggregator(8192),

          new WebSocketClientProtocolHandler(wsHandShaker,true),
          new SimpleChannelInboundHandler<TextWebSocketFrame>() {
                             @Override
                             protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame frame) throws Exception {
                                 System.out.println(frame.text());
                             }
                         });
p.addLast(ClientSslHandler);
p、 addLast(
新LoggingHandler(LogLevel.INFO),
新的HttpClientCodec
新LoggingHandler(LogLevel.INFO),
新的HttpObjectAggregator(8192),
新的WebSocketClientProtocolHandler(wsHandShaker,true),
新的SimpleChannelInboundHandler(){
@凌驾
受保护的无效channelRead0(ChannelHandlerContext ctx,TextWebSocketFrame框架)引发异常{
System.out.println(frame.text());
}
});
我不确定这是否是解决这个问题的正确方法,因为我还没有完全理解HttpClientCodec的内部工作原理。但希望答案能让我朝着正确的方向前进。谢谢