【问题标题】:Netty fragmentation for client messages with varying length不同长度的客户端消息的 Netty 碎片
【发布时间】:2017-03-13 16:06:55
【问题描述】:

我在数据的网络碎片方面遇到了一些问题。 我的服务器接受来自客户端的连接。客户端 发送不同的消息类型。这些消息告诉长度 前 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]

我可以说我缺少消息,因为消息是按顺序编号的。 下面是 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

我不知道为什么,但我认为消息可能是碎片化的

【问题讨论】:

    标签: java netty decode fragmentation


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      • 2012-12-05
      • 2015-04-07
      • 2012-06-21
      • 2021-06-07
      • 2016-08-06
      • 2014-11-01
      相关资源
      最近更新 更多