5

我想使用 iPhone 上的加速度计在 iPad 上控制太空船。这些设备使用 Multipeer Connectivity Framework 进行连接。我在将两个设备链接在一起的会话对象上使用常规 sendData 方法发送加速度计数据。

一切正常,除了有一个相当严重的延迟。然后我开始注意到一些奇怪的东西。消息正在以突发形式发送,这里有一些记录在 iPad 上收到消息之间经过的时间。

time elapsed: 0.488062
time elapsed: 0.002678
time elapsed: 0.001255
time elapsed: 0.001652
time elapsed: 0.005365
time elapsed: 0.516167 <-- 500ms gap
time elapsed: 0.004351
time elapsed: 0.001268
time elapsed: 0.001069
time elapsed: 0.001048

这些是来自控制器(iphone)的登录,数据的发送者:

time elapsed: 0.099938
time elapsed: 0.100045
time elapsed: 0.099997
time elapsed: 0.099978
time elapsed: 0.100027
time elapsed: 0.099975
time elapsed: 0.099997
time elapsed: 0.100296
time elapsed: 0.099719
time elapsed: 0.099567
time elapsed: 0.100650

使用每 100 毫秒触发一次的计时器发送数据。(10次/秒)

有了这些信息,我只能假设数据的发送以某种方式缓冲并以另一个速率(似乎每 500 毫秒)(2 次/秒)发送。

我也尝试过使用框架的 NSStream 版本来发送数据。再次注意到同样的爆裂。然后我尝试对 inputStream 进行自己的轮询并消除了突发,但延迟保持不变或更高。感觉大约 500-1000 毫秒。我真的没有衡量延迟的正确方法,但只要尝试控制那艘宇宙飞船是完全毫无价值的体验,我就知道它太高了:)

我在进行这种编程方面的经验很少,因此不胜感激。我什至不知道最终希望的延迟有多低,但感觉在这样的游戏中,20-50 毫秒的延迟是可以接受的。我说的是从 iPhone 到 iPad 的单向延迟。

4

0 回答 0