【问题标题】:TCP vs Reliable UDPTCP 与可靠的 UDP
【发布时间】:2011-05-09 22:30:00
【问题描述】:

我正在编写一个应用程序,客户端将通过无线链接将数据上传到服务器。

连接应该很可靠。预计链接会断开很多次,会有很多客户端连接到服务器。

我很困惑是使用 TCP 还是可靠的 UDP。

请分享你的想法。

谢谢。

【问题讨论】:

标签: tcp rudp


【解决方案1】:

当然,RUDP 不是一个正式的标准,也不知道您是否会找到可以使用的现有实现。如果要在从头开始滚动和重新建立 TCP 连接之间进行选择,我会选择 TCP。

【讨论】:

    【解决方案2】:

    为了安全起见,我会选择 TCP 只是因为它是一种可靠的标准协议。 RUDP 的缺点是不是一个既定标准(尽管它在多个 IETF 讨论中被提及)。

    祝你的项目好运!

    【讨论】:

      【解决方案3】:

      如果您不确定,很有可能您应该使用 TCP。一方面,它肯定会成为任何支持 IP 的网络堆栈的一部分。 “可靠的 UDP”很少得到开箱即用的支持,因此您需要为您的客户提供一些额外的支持工作。

      【讨论】:

        【解决方案4】:

        您的 TCP 和 RUDP 链接很可能会被您的环境破坏,因此您使用 RUDP 的事实不太可能对此有所帮助;可能会有数据报无法通过的时候......

        您真正需要确保的是 a) 您可以处理连接的客户端数量,b) 当您与客户端(或服务器)失去连接时,您的应用程序协议可以合理快速地检测到,以及 c) 您可以为客户端处理所需的重新连接和交叉连接会话状态的维护。

        只要您处理 b) 和 c),连接是否不断中断并不重要。确保您设计了您的应用程序协议,以便您可以在短时间内完成任务;因此,如果您要上传文件,请确保您发送的是小块,并且应用程序协议可以恢复中途中断的传输;您不希望通过 2gb 传输获得 99% 的路径并失去连接而不得不重新开始。

        为此,您的服务器需要某种客户端会话状态缓存,您可以在其中保持客户端连接的逻辑状态超出连接本身的生命周期。从一开始就设计期望给定会话包含多个单独的连接。会话状态应该可能有某种超时,所以如果客户端离开一段时间,它不会继续消耗服务器上的资源,但老实说,这可能只是在之后将状态保存到磁盘的情况一会儿。

        总之,我认为传输方式的选择并不重要,至少一开始我会选择 TCP。真正重要的是能够在服务器上管理客户端的会话状态并处理客户端会定期连接和断开连接的事实。

        【讨论】:

          猜你喜欢
          • 2016-09-19
          • 2021-04-14
          • 2010-09-07
          • 2010-12-26
          • 2011-09-25
          • 2017-05-10
          • 2011-11-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多