从Netty服务器读取时合并了不同的响应消息

时间:2019-04-15 12:10:24

标签: java tcp netty

我有一个netty客户应用程序。该应用正在连接到端口并检索tcp响应。当我读取负载下的respose时,一些响应消息会串联在一起。我的请求和响应消息具有唯一的交易密钥。我遵循我的业务逻辑;

实际值:000010690013200000101PMAX 567F 0000000000 1554092081842400 0 000010690013200000101PMAX 567F 0000000000 1556083801080400 0

预期:000010690013200000102PMAX 567F 0000000000 1554092081842400 0

公开响应为2个响应,但服务器仅发送1个响应,我们在读取时将其汇总

@Override
public void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf in) {
    String input = in.toString(CharsetUtil.UTF_8);
    log.info(input);
}

我该如何解决此问题,它是在负载下发生的。

网络版本:4.1.25。最终版 Java版本:OpenJDK 64位服务器VM(内部版本25.161-b14,混合模式)

谢谢。

1 个答案:

答案 0 :(得分:1)

这是预期的,也是TCP的工作方式。 TCP没有消息边界的概念,因此您可能会在读取字节时收到它们(这意味着东西可能会碎片化等)。

如果需要保留某种消息边界,则需要在协议中对该信息进行编码。例如,您可以在消息的长度之前加上前缀,然后在接收对等方上使用此信息来正确解码消息。

Netty本身包含一些

的解码器/编码器

LengthFieldPrepender

LengthFieldBasedFrameDecoder