我有一个 netty 客户端应用程序。此应用程序正在连接到端口并检索 tcp 响应。当我在负载下阅读响应时,一些响应消息正在连接。我的请求和响应消息具有唯一的事务密钥。我正在关注我的业务逻辑;实际:000010690013200000101PMAX 567F 0000000000 1554092081842400 0 000010690013200000101PMAX 567F 0000000000 1556083801080400 0预期:000010690013200000102PMAX 567F 0000000000 1554092081842400 0重复响应有 2 个响应,但服务器仅发送 1 个响应,我们在阅读时汇总了它@Overridepublic void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf in) { String input = in.toString(CharsetUtil.UTF_8); log.info(input);}我该如何解决这个问题,它是在负载下发生的。Netty 版本:4.1.25.Final Java 版本:OpenJDK 64-Bit Server VM(build 25.161-b14,混合模式)谢谢。
1 回答

慕姐8265434
TA贡献1813条经验 获得超2个赞
这是意料之中的,也是 TCP 的工作原理。TCP 没有消息边界的概念,因此您可能会在读取字节时收到它们(这意味着内容可能会被分段等)。
如果您需要保留某种消息边界,则需要在协议中对此信息进行编码。例如,您可以预先添加消息的长度,然后在接收对等方上使用此信息来正确解码消息。
Netty 本身包含一些解码器/编码器
添加回答
举报
0/150
提交
取消