【问题标题】:if my application is using tcp protocal? then do i need a retry mechanism in my Application?如果我的应用程序使用 tcp 协议?那么我的应用程序中是否需要重试机制?
【发布时间】:2019-04-03 13:18:35
【问题描述】:

如果我在我的应用程序中使用 tcp 协议,那么我是否需要在我的应用程序中使用另一个重试机制?

我希望我的消息 100% 被我的客户端接收,如果它收到重复的消息,所以客户端重新向服务器发送 ACK,如果我使用 tcp 长连接,在什么情况下服务器无法获得 ack? 假设服务器/客户端代码不会丢弃 ACK 本身,并且 tcp 连接将保持活动状态,在这种情况下,我是否需要在服务器中设置重试机制以确保客户端获取消息?还是有什么条件会导致ack丢失?还是tcp会丢包?

【问题讨论】:

    标签: tcp


    【解决方案1】:

    TCP(仅)关心数据是否丢失、重复或重新排序到应用程序。但是当数据实际到达目标系统时,它不会给发送者任何反馈。它也不关心应用程序是否实际处理数据,并且如果应用程序在退出之前实际读取了所有数据,它也不提供可靠的反馈。因此,如果您需要应用程序实际处理并响应您发送的数据的反馈,那么您需要向您的应用程序协议添加适当的反馈。

    【讨论】:

      【解决方案2】:

      TCP 是可靠的协议,它不会从流的中间丢弃或重新排序任何数据。 (OOB数据除外)

      示例:当您将消息 A 和 B(按此顺序)从客户端发送到服务器时。 TCP 保证服务器应用程序在 B 之前从 TCP 流中接收到 A。 TCP 将在违反该规则之前中止 TCP 连接。

      TCP 为您完成所有必要的重新传输,以确保来自客户端的输出流与服务器的输入流相同。反之亦然。

      如果您的客户端和服务器应用程序不会丢弃/忽略已传输的消息, 那么不应该有在应用程序级别重新发送消息的理由。 重新发送消息很可能会导致重复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-07
        • 2012-03-26
        • 1970-01-01
        • 1970-01-01
        • 2018-05-03
        • 2020-05-22
        • 2016-01-01
        • 2011-12-01
        相关资源
        最近更新 更多