不同长度的客户端消息的 Netty 碎片

Netty fragmentation for client messages with varying length

我在处理 netty 数据碎片方面遇到了一些问题。 我的服务器接受来自客户端的连接。客户端 发送不同的消息类型。这些消息告诉长度 前 2 个字节中的有效负载。

一个例子:

Message 1
[00 21][21 bytes of payload]

Message 2
[00 25][23 bytes of payload]

Message 1
[00 80][80 bytes of payload]

我可以看出我遗漏了消息,因为消息是按顺序编号的。 以下是处理后的有效载荷:

Count:1,Messnger:John Doe1, Message:"I can tell you something";
Count:1,Messnger:John Doe2, Message:"What do you have to tell me";
Count:1,Messnger:John Doe3, Message:"Always be reading and teaching";

假设客户端发送了5条消息:

Message 1
Message 2
Message 3
Message 4
Message 5

在阅读和处理过程中,我遗漏了一些信息。我只会说

Message 1
Message 2
Message 4

我不确定为什么,但我认为消息可能会碎片化

听起来您处理邮件的方式可能有问题。您很可能在单个 channelRead 事件中收到部分消息甚至多条消息。

我建议查看 LengthFieldBasedFrameDecoder 并将其添加到您的 ServerHandler 之前。它应该有助于为您简化消息处理。