当前位置:  开发笔记 > 运维 > 正文

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

如何解决《通过UDP从服务器向iPhone发送大量实时处理数据》经验,为你挑选了1个好方法。

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

我研究了一些UDP,我知道以下内容:

UDP的最大大小约为65k.

但是,似乎iPhone只能接收41k UDP数据包.iPhone似乎无法接收比这更大的数据包.

发送多个数据包时,会丢弃许多数据包.这是由于UDP处理过大.

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

我之前从未编写过真正的实用UDP应用程序,所以我需要一些有效的UDP通信指导.在这种情况下,我们正在讨论从服务器实时传输渲染图像以在iPhone上显示.

压缩数据似乎是强制性的,但在这个问题中,我想关注UDP部分.通常,当我们实现UDP应用程序时,如果我们需要实时不间断地发送大量数据,我们可以在高效UDP编程的最佳实践方面做些什么呢?



1> Robert S. Ba..:

假设您有一个非常具体和充分的理由使用UDP并且您需要所有数据到达(即您无法容忍任何丢失的数据),那么您需要做一些事情(这假设是单播的)申请):

    为每个数据包的标头添加序列号

    确认每个数据包

    设置重传计时器,如果没有ack recv,则重新发送数据包

    跟踪延迟RTT(往返时间),以便您知道设置定时器的时间

    如果这对您的应用程序很重要,则可能会处理无序数据到达

    加大对客户端套接字接收缓冲区的大小.

此外,您可能发送得如此之快,以至于您在发送计算机内部丢弃数据包,甚至没有将网卡放到线路上.在某些系统上,在发送套接字上调用select-write-ablity可以帮助解决这个问题.此外,在UDP套接字上调用connect可以加快性能,从而减少丢弃的数据包.

基本上,如果您需要保证按顺序传送数据,而不是在UDP之上重新实现TCP.如果您使用UDP的唯一原因是延迟,那么您可以使用TCP并禁用Nagle算法.如果您希望打包数据具有可靠的低延迟交付,则另一种可能性是SCTP,同时禁用Nagle.它还可以提供无序交付,以加快速度.

我会推荐Steven的" Unix网络编程 ",它有一个关于高级UDP的部分,以及何时适合使用UDP而不是TCP.作为一个注释,他建议不要使用UDP进行批量数据传输,尽管现实情况是,这对于流式多媒体应用来说正变得越来越普遍.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有