如何通过套接字传输邮件时确保邮件订单的正确性?是否有任何具体设计可供遵循?请提出一些方法...
答案 0 :(得分:1)
如果是TCP套接字,则自动为TCP堆栈内置支持丢弃的数据包等。您不需要做任何事情,除非注意丢弃的数据包可能会在重新发送数据包时导致短暂的闪烁。这种情况一直都在发生:没有人注意到(除了写交换机的人等)。
如果您正在尝试处理完全中断的连接:这取决于您的协议。如果您对每条消息进行请求/响应,那么这很简单 - 但是您需要支付大量的延迟开销。有些协议在请求/响应方面完全独立工作(每次发送请求时都不会停止响应 - 您只是继续发送请求,并且响应将在未来的某个时间点返回)。在该设置中,您将不得不围绕它进行设计:可能是最后一个已知的响应,但这仍然意味着有些事情可能已经处理过而没有您回复。所以:您可能希望所有操作都安全重复,因此您可以在发送时再次发出,但不知道是否已完成。
如果您使用的是UDP,那么答案就是“完全是您;这是您的问题;您需要弄明白”,这通常意味着在每个数据包中嵌入序列号。当然,如果你使用的是UDP,你可能只是想设计允许丢弃数据包,并在将来很快重新同步。
答案 1 :(得分:0)
TCP按发送的顺序传送数据。 UDP没有。如果您有一个导致TCP失败的错误,这是非常罕见的,您必须重新开始。 UDP不保证传送,因此您需要在其上添加协议以请求重传并应用排序。使用TCP或进行自己的序列检查。