不同长度的客户端消息的 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 之前。它应该有助于为您简化消息处理。
我在处理 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 之前。它应该有助于为您简化消息处理。