3

我正在考虑创建一个实时应用程序,其中 iPod Touch/iPhone/iPad 与服务器端组件(产生 MIDI,并在主机内向前发送)对话。当我在 Wifi 上 ping 我的 iPod Touch 时,我得到了巨大的延迟(以及巨大的差异):

64 bytes from 192.168.1.3: icmp_seq=9 ttl=64 time=38.616 ms
64 bytes from 192.168.1.3: icmp_seq=10 ttl=64 time=61.795 ms
64 bytes from 192.168.1.3: icmp_seq=11 ttl=64 time=85.162 ms
64 bytes from 192.168.1.3: icmp_seq=12 ttl=64 time=109.956 ms
64 bytes from 192.168.1.3: icmp_seq=13 ttl=64 time=31.452 ms
64 bytes from 192.168.1.3: icmp_seq=14 ttl=64 time=55.187 ms
64 bytes from 192.168.1.3: icmp_seq=15 ttl=64 time=78.531 ms
64 bytes from 192.168.1.3: icmp_seq=16 ttl=64 time=102.342 ms
64 bytes from 192.168.1.3: icmp_seq=17 ttl=64 time=25.249 ms

即使这是 iPhone->Host 或 Host->iPhone 时间的两倍,对于我正在考虑的应用程序来说,15ms+ 也太长了。有没有更快的方法解决这个问题(例如,USB 电缆)?如果没有,在 Android 上构建应用程序会提供任何其他选择吗?

Traceroute 报告更多可行时间:

traceroute to 192.168.1.3 (192.168.1.3), 64 hops max, 52 byte packets
 1  192.168.1.3 (192.168.1.3)  4.662 ms  3.182 ms  3.034 ms

任何人都可以为我解读 ping 和 traceroute 之间的这种区别,以及它们对于需要与主机通信(和从主机通信)的应用程序可能意味着什么?

4

3 回答 3

4

请记住,ping 的“往返”包括 host1->AP->host2->AP->host1 的时间,而 traceroute 的“往返”包括 host1->AP->host1。那些 ping RTT 时间实际上相当不错。在我家,它们平均接近 250 毫秒,而我的 3GS 经常达到 300 毫秒以上。

Ping 响应时间受内核可用性的影响。如果 ICMP 请求进入时 CPU 正忙,则它会被缓冲,直到 CPU 可以处理它。这种阻塞有很多机会发生在像 iPhone 这样资源受限的设备上(或者说,一个负担过重的路由器)。此外,iPhone OS 会在一定程度上尝试对数据包进行排队,以便以突发方式传输。这可以防止无线电连续发射,从而节省电力。当然,这会影响延迟,并且会挑战任何需要低和/或稳定延迟的应用程序(例如 VoIP)。

目前还没有针对 USB 本身的 TCP/IP 的公共标准(与 1394 相反,有)。由于 USB 是一个串行链路层,理论上可以使用您自己的协议或预定义的协议(例如 PPP)通过扩展坞连接器传递数据。一旦建立了 EASession,通信就会通过正常的 NSInputStream/NSOutputStream 进行。

于 2010-04-20T23:43:25.067 回答
4

我认为这可能是 WiFi 省电模式杀死你。我认为手机会缓冲数据包并仅偶尔发送出去。我在使用的 N900 上通过 WiFi 看到了类似的行为。

请注意您发布的 ping 中的强烈模式。这很可能是由 ping 和天线周期性地打开和关闭产生的拍频模式。

于 2010-06-06T06:00:04.400 回答
1

我在 Verizon 和 AT&T 做了大量的蜂窝网络工作。指向移动设备时的 Ping 时间必须理解为任何初始连接尝试都将高于正常情况。

如果我们看到的 ping RTT 基线对于 AT&T 来说平均约为 300 毫秒。对于 Verizon 400 毫秒到 600 毫秒,它们甚至更高。

但是每个运营商的第一个数据包必须首先找到移动设备。正因为如此,你得到的第一反应可能真的(真的)很高。3000 毫秒到高达 4500 毫秒是我在我管理的网络上看到的,该网络有 2700 个移动端点,我们定期从监控系统连接到这些端点。

此外,任何具有大量射频噪声的环境都会产生延迟和丢包。即使是您的家也会产生大量噪音来干扰通过无线电运行的设备。

这可能没有帮助,但是...如果您可以使用具有更好缓冲功能的 API,您可能会更好...或者更仔细地查看您正在考虑使用的当前 API 的缓冲功能。

我希望你让它工作=)

于 2010-04-21T07:42:50.643 回答