gpt4 book ai didi

iphone - 通过 UDP 从服务器向 iPhone 发送大量实时处理的数据

转载 作者:行者123 更新时间:2023-12-03 18:43:49 28 4
gpt4 key购买 nike

我正在实现一个远程应用程序。服务器将实时处理和渲染数据作为动画。 (准确地说,是一系列图像)每次渲染图像时,都会通过 UDP 将图像传输到接收 iPhone 客户端。

我研究了一些UDP,我知道以下几点:

  • UDP 的最大大小约为 65k。

  • 但是,iPhone似乎只能接收41k UDP数据包。 iPhone 似乎无法接收大于此的数据包。

  • 发送多个数据包时,许多数据包被丢弃。这是由于 UDP 处理规模过大造成的。

  • 减小数据包大小会增加未丢弃的数据包数量,但这意味着需要发送更多数据包。

我以前从未编写过真正实用的 UDP 应用程序,因此我需要一些指导来实现高效的 UDP 通信。在本例中,我们讨论的是从服务器实时传输渲染图像以在 iPhone 上显示。

压缩数据似乎是强制性的,但在这个问题中,我想重点关注 UDP 部分。通常情况下,我们在实现UDP应用时,如果需要实时不间断地发送大量数据,那么如何才能实现高效UDP编程的最佳实践呢?

最佳答案

假设您有一个非常具体且充分的理由使用 UDP,并且您需要所有数据到达(即您不能容忍任何数据丢失),那么您需要做以下几件事:需要做的(这假设是一个单播应用程序):

  1. 向每个数据包的 header 添加序列号
  2. 确认每个数据包
  3. 设置一个重传计时器,如果没有收到确认,则重新发送数据包
  4. 跟踪延迟 RTT(往返时间),以便您知道将计时器设置多长时间
  5. 如果无序数据到达对您的应用很重要,则可以处理该问题
  6. 增加客户端套接字上的接收缓冲区大小

此外,您的发送速度可能太快,以至于您在发送计算机上内部丢弃数据包,甚至没有将它们从 NIC 传到线路上。在某些系统上,在发送套接字上调用 select for write-ablity 可以帮助解决此问题。此外,在 UDP 套接字上调用 connect 可以提高性能,从而减少丢包。

基本上,如果您需要保证数据按顺序传送,那么您将在 UDP 之上重新实现 TCP。如果您使用 UDP 的唯一原因是延迟,那么您可以使用 TCP 并禁用 Nagle Algorithm 。如果您想要具有可靠的低延迟传输的分组数据,另一种可能性是 SCTP ,同样禁用 Nagle。它还可以提供无序交付以进一步加快速度。

我会推荐 Steven 的“Unix Network Programming”,其中有一节介绍高级 UDP 以及何时适合使用 UDP 而不是 TCP。作为说明,他建议不要使用 UDP 进行批量数据传输,尽管现实情况是,如今对于流媒体多媒体应用程序来说,这种情况变得越来越普遍。

关于iphone - 通过 UDP 从服务器向 iPhone 发送大量实时处理的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2388514/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com