Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过UDP将大量实时处理的数据从服务器发送到iPhone_Iphone_Networking_Udp_Real Time - Fatal编程技术网

通过UDP将大量实时处理的数据从服务器发送到iPhone

通过UDP将大量实时处理的数据从服务器发送到iPhone,iphone,networking,udp,real-time,Iphone,Networking,Udp,Real Time,我正在实现一个远程应用程序。服务器将以动画的形式实时处理和渲染数据。(准确地说是一系列图像)每次渲染图像时,图像都会通过UDP传输到接收的iPhone客户端 我已经学习了一些UDP,并了解到以下几点: UDP的最大大小约为65k 然而,iPhone似乎只能接收41k UDP数据包。iPhone似乎无法接收比这更大的数据包 发送多个数据包时,许多数据包被丢弃。这是由于UDP处理规模过大造成的 减小数据包大小会增加未丢弃的数据包数量,但这意味着需要发送更多的数据包 我以前从未编写过真正实用的UD

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

我已经学习了一些UDP,并了解到以下几点:

  • UDP的最大大小约为65k

  • 然而,iPhone似乎只能接收41k UDP数据包。iPhone似乎无法接收比这更大的数据包

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

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

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


压缩数据似乎是必须的,但在这个问题中,我想重点讨论UDP部分。通常,当我们实现UDP应用程序时,如果我们需要实时不间断地发送大量数据,那么在高效UDP编程的最佳实践方面,我们能做些什么呢?

小数据包可能比大数据包好:-)

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

  • 为每个数据包的报头添加一个序列号
  • 确认每个数据包
  • 设置一个重传计时器,如果没有收到ack,它将重新发送数据包
  • 跟踪延迟RTT(往返时间),以便知道设置计时器的时间长度
  • 如果对您的应用程序很重要,则可能会处理无序数据到达
  • 增加客户端套接字上的接收缓冲区大小
  • 此外,您的发送速度可能会非常快,以至于在发送计算机内部丢弃数据包时,数据包甚至都不会从NIC传输到线路上。在某些系统上,在发送套接字上调用select for write Ability可以帮助您做到这一点。此外,在UDP套接字上调用connect可以加快性能,从而减少数据包的丢弃

    基本上,如果您需要保证按顺序交付数据,那么您将在UDP之上重新实现TCP。如果您使用UDP的唯一原因是延迟,那么您可能可以使用TCP并禁用。如果您希望打包数据具有可靠的低延迟交付,另一种可能性是,也禁用Nagle。它还可以提供无序交货,使速度更快


    我推荐史蒂文的“其中有一节介绍了高级UDP以及何时使用UDP而不是TCP是合适的。值得注意的是,他建议不要使用UDP进行批量数据传输,尽管现实情况是,这在流媒体应用程序中变得越来越普遍。

    抱歉,但这一点毫无帮助。请您进一步说明一下,这是一个很好的实践UDP应用程序的目的是将数据包大小保持在MTU大小之下,这样就不会出现碎片。请注意,MTU大小通常非常低。例如1396字节。您选择UDP而不是TCP有什么具体原因吗?