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

时间:2018-07-27 09:11:46

标签: netty

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

         +-------------------------------------------------+
         |  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());
                             }
                         });

我不确定这是否是解决此问题的正确方法,因为我还没有完全了解HttpClientCodec的内部工作原理。但是希望答案能给我正确的方向。谢谢!

0 个答案:

没有答案