UDP适用于从iOS传输离散事件

时间:2011-04-02 02:00:12

标签: ios sockets tcp udp

我在检测到离散和连续手势时发送消息。对于连续性,UDP应该没问题,因为即使丢失了几个数据包,也有很多变化事件无关紧要。

我想知道离散事件,例如点击或滑动。由于只发送了一个数据包,它没有到达的风险是什么,而另一端的应用程序没有通知该姿势?

我知道TCP保证了交付,但我认为对于连续手势生成的高频率消息来说可能是太多开销。

1 个答案:

答案 0 :(得分:2)

如果您对TCP的唯一担心是额外的开销,那么我不会太担心。当然,TCP比UDP有更多的开销。但是,开销不是 ,特别是对于您可能发送的适量数据。一些快速的信封计算:

  • 假设您希望每毫秒发送一次状态信息。 (可能比你真正需要的更频繁。)

  • 假设您的个人消息可以轻松容纳50个字节/每个。 (可能比你真正需要的要大。)

  • 总带宽50字节/毫秒= 400位/毫秒= 400 kbps

即使有这些大于必要的消息和快于需要的更新,您的总带宽也只是慢速802.11b无线网络的5%左右。 TCP的额外开销不太可能在这里产生很大的不同。

就个人而言,我倾向于坚持TCP,除非我有充分的理由不这样做。当然,你可以通过使用UDP来节省一些额外的比特,但对我来说,拥有可靠的交付(包括正确排序的数据,非重复数据)是值得的额外开销。少担心一件事。

编辑:TCP确实有一些其他缺点。特别是,可能需要更多的编程工作来创建初始连接,并从字节流中解析单个消息。 UDP当然可以使这些任务更容易。但是,您没有将编程复杂性列为您的标准之一,因此我专注于您的开销问题。

延迟:如下面的评论中所述,延迟是一个关键因素。在这种情况下,UDP具有一些显着的优点:如果丢弃数据包,TCP将在发送其他数据包之前等待重新传输该数据包。这种方法的好处是保证数据以原始顺序到达。 (当必须按顺序处理消息时,这是一个很大的优势。)当然,缺点是新数据可能会有很大的延迟。

另一方面,UDP将继续发送后续数据包,即使丢弃了一个数据包。好消息是UDP减少了剩余数据包的延迟。然而,坏消息是你必须添加某种“重试”,以防离散事件丢失 - 如果你这样做,你现在有手势无序到达的情况,也许是显着的所以。您的应用可以处理“移动然后单击”更改为“单击然后移动”的情况吗?如果您选择使用UDP路由,则需要仔细考虑所有这些情况,以确保它不会在您的应用中引起(可能是微妙的)问题。