【发布时间】:2019-11-10 17:58:28
【问题描述】:
我正试图在多个设备上同时(或以尽可能低的延迟/偏移)在我的 Android 应用中触发一个操作。
这些设备非常相似(品牌、型号、版本),通过 USB 插入 Macbook Pro。到目前为止,我有 4 台设备,但最终的解决方案将包括更多设备,因此我需要一个适用于很多设备的解决方案。
我曾尝试在 Wifi 和 USB 上使用套接字(Socket.io 和常规 WS),但每个设备的延迟略有增加,因此不会同步触发操作。
我还尝试通过 USB 发送广播 UDP 数据包,这会产生更好的结果,但似乎非常不一致:最大延迟从 10 毫秒变为 100 毫秒。
同步时钟是我正在考虑的另一个选择,但不确定它在许多设备上的准确度(而且 NTP 在 Android 上似乎很棘手)
有什么想法或模式可以解决这种要求吗?谢谢!
编辑
所以在做了一些测试之后,最准确的选择是按照 Sam Mason 的建议使用 NTP 同步设备时钟(我使用的是 this library)。我设法在我的 4 台设备之间实现了平均 5 毫秒的转换。
【问题讨论】:
-
这听起来像是多播的工作,但请记住,广播和多播对于 Wi-Fi 来说是有问题的,因为它必须以最低的速度发送,以便远距离的客户端也能接收到它。一些 WAP 被配置为将其更改为单独的单播,并将它们串行发送。在有线网络或未配置为将广播/多播更改为单播的 Wi-Fi 上,每个主机将同时接收数据包。由于接收主机内部的延迟,可能会出现差异。
标签: android networking websocket synchronization udp