【问题标题】:Can sending first a UDP message and then a TCP message be any good?可以先发送 UDP 消息然后发送 TCP 消息有什么好处吗?
【发布时间】:2012-08-27 11:05:14
【问题描述】:

我有一个通过 LAN 与其他客户端实时通信的应用程序。该应用程序要求数据包有序且全部到达。它还需要尽可能快的传输,在这件事上我似乎对 TCP 有一些问题。

所以我在想,作为一个没有经验的网络程序员,如果我先发送一个 UDP 协议消息,然后再用 TCP 发送相同的数据会怎样。如果 UDP 消息到达,我会尽快收到它,否则我仍然有 TCP 消息,以确保我至少会收到数据包。显然,我会通过为每条消息指定一个 ID 或类似名称来确保不会两次读取相同的数据。

这是什么好方法吗?我在想也许同时发送 tcpmessage 只会减慢 udp 消息的速度,所以无论如何它不会有所作为。

【问题讨论】:

    标签: sockets networking tcp udp real-time


    【解决方案1】:

    不,这不是一个好方法。

    您将网络带宽翻了一番,并显着增加了网络代码的复杂性,但收益却微乎其微。

    TCP 和 UDP 具有非常不同的特性。如果您关心数据是否及时到达,如果数据迟到就没有用,那么 TCP 就没有用,因此您应该使用并且只使用 UDP。如果您不关心数据是否及时到达,那么 UDP 就没有用处,因为它不可靠。

    【讨论】:

    • 只是在这种情况下,迟到的数据仍然很重要,因为所有消息都依赖于之前的消息。当我使用 UDP 时,我的应用程序运行良好,但我不能丢失任何消息,所以我转向 TCP。但我想你说的很有道理。
    • 如果每条消息都很重要,并且您希望尽快收到它们,那么您将遇到一个棘手的问题。也许你可以改变问题的性质?
    【解决方案2】:

    不,这根本不是一个好方法。您现在将有两倍的数据被发送。 对于实时通信,UDP 是最好的方法。您应该设计您的接收器算法来管理数据到达并对其进行排序以及某些数据未到达。

    发送的数据类型也是一个决定因素。如果它的交易是金融类的,udp 不是一个好主意。但是你应该在不同的网络上。

    如果是视频数据,实时性很重要,损失是可以容忍的。

    所以看看你是否可以使用数据的属性来很好地管理 udp 连接。

    【讨论】:

      【解决方案3】:

      UDP 有非常具体的用例。即说一个发送玩家坐标的在线游戏。您声明了订单并需要确认,因此 TCP 似乎是最明智的方法。

      尽管只是为了混合,TCP 有时会让您大吃一惊,并在特定情况下提供更好的性能。

      TCP 将在通过网络发送数据之前尝试缓冲数据(更有效地利用带宽)。另一方面,UDP 立即将数据包通过网络。

      现在想象一下通过网络写入大量小数据包,UDP 可能会导致拥塞,而 TCP 可以更好地控制。

      【讨论】:

      • 这是一个在线游戏,用户交流他们的按键。每条消息都包含他按下的键和自上次按键后到达的距离。因此,如果一条消息丢失,整个议案就会出错。当我测试它时,UDP 似乎对我来说延迟更好。
      • 我开发了一个乒乓球游戏,球是连续移动的,所以如果错过一帧位置更新,这并不是世界末日。猜猜你是否正在等待像你这样的按键,你需要一个保证。混合方法怎么样,UDP 用于无关紧要的东西,即如果不断发送帮助更新,请使用 UDP,因为如果更新稍微延迟也没关系,但定位使用 TCP。
      • 这其实是网络游戏常用的做法。 UDP 用于对延迟至关重要但对数据丢失不敏感的大流量 - 例如玩家在给定时刻的位置。 TCP 用于不能丢失但使用的带宽要小得多的关键数据——例如玩家得分。这需要以这样一种方式设计通信协议,即通过 UDP 发送的内容可能会丢失,例如,您不能发送相对于前一个位置的位置,而是绝对的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 2019-11-26
      • 2015-03-25
      相关资源
      最近更新 更多