Java 应保持有序的分块通信

Java 应保持有序的分块通信,java,client-server,network-protocols,Java,Client Server,Network Protocols,服务器客户端应用程序通过http/xml进行对话。服务器发送带有数字或区块id的xml文件。有时,客户端收到的xml区块id高于预期。所以我需要排队,因为顺序很重要。我使用一个TreeMap,这样我就可以将xml添加到映射中,直到收到一个具有预期区块id的xml。也可能是一个xml是由服务器发送的,但客户端接收到的是更新的。由于“发送并忘记”,服务器不知道这一点。所以我的问题是如何处理这个问题?我应该重构架构吗?这有什么模式吗 示例 expected chunk id / real chunk

服务器客户端应用程序通过http/xml进行对话。服务器发送带有数字或区块id的xml文件。有时,客户端收到的xml区块id高于预期。所以我需要排队,因为顺序很重要。我使用一个
TreeMap
,这样我就可以将xml添加到映射中,直到收到一个具有预期区块id的xml。也可能是一个xml是由服务器发送的,但客户端接收到的是更新的。由于“发送并忘记”,服务器不知道这一点。所以我的问题是如何处理这个问题?我应该重构架构吗?这有什么模式吗

示例

expected chunk id / real chunk id
      0                   0   eval
      1                   3   add to queue
      2                   4   add to queue
      3                   2   add to queue
      4                   1   add to queue
      5                   5   eval / eval queue
      6                   6   eval
      -                   7   no send to client
      7                   8   ?
      8                   9   ?

我构建了一个可以添加带有数字的
Runnable

是底层传输UDP吗?通常HTTP使用TCP,这应该保留顺序。(不回答你的问题,只是我的一部分)。而且,作为一个小的改进,你可以考虑在除了预期块与接收的块匹配的时间之外对队列进行评估。例如,上面的步骤5,当您收到
1
时,给了您一个完整的
1
-
4
。是的,您是对的,但问题是服务器没有按正确的“逻辑”顺序发送。Wireshark已经证明了这一点。另一点也是好的。我想我找到了一个或多或少不错的解决办法@没有人回答我的问题。我构建了一个类
OrderedRunnableQueue
,它满足了我的需要,我考虑了你的评论。