-1

通过套接字传输消息时如何确保消息顺序的正确性?有什么具体的设计可以遵循吗?请推荐一些方法...

4

2 回答 2

1

如果它是 TCP 套接字,那么对丢弃的数据包等的支持会自动内置到 TCP 堆栈中。您无需执行任何操作,但请注意,丢弃的数据包可能会在重新发送数据包时导致短暂的信号中断。这种情况一直在发生:没有人注意到(除了写开关的人等)。

如果您尝试处理完全中断的连接:这取决于您的协议。如果您正在对每条消息进行请求/响应,那么这很简单 - 但您需要支付大量延迟开销。一些协议在请求/响应方面完全独立工作(您不会在每次发送请求时都停止响应 - 您只是继续发送请求,并且响应将在将来的某个时候返回)。在该设置中,您将不得不围绕它进行设计:也许到最后一个已知的响应,但这仍然意味着有些事情可能已经在您没有收到回音的情况下进行了处理。所以:你可能想让所有的动作安全地重复,所以如果你发送了它,你可以再次发出它,但不知道它是否完成。

如果您使用的是 UDP,那么答案是“完全是您;那是您的问题;您需要弄清楚”,这通常意味着在每个数据包中嵌入一个序列号。当然,如果您使用的是 UDP,您可能只是设计为允许丢弃的数据包,并在不久的将来重新同步。

于 2013-01-08T12:16:53.490 回答
0

TCP 按照发送的顺序传递数据。UDP 没有。如果你有一个错误导致 TCP 失败,这是非常罕见的,你必须重新开始。UDP 不保证传送,因此您需要在其之上添加一个协议来请求重传并应用排序。使用 TCP 或进行自己的序列检查。

于 2013-01-08T12:16:46.030 回答