android - 通过套接字同步秒表运行时持续时间
问题描述
目前,秒表在多个设备上运行,这些设备通过套接字服务器保持同步。当设备启动秒表时,它会向套接字服务器发送一条消息,其他侦听的客户端会看到此消息并启动他们的秒表。没有大量的延迟,所以当它们运行时,它们之间的时间略有不同并不是什么大问题。
但是,当按下“暂停”或“停止”时,我们希望在暂停客户端设备上显示的最后时间也与所有设备上显示的时间相同。
目前,当计时器停止/暂停时会发生以下情况:
long time = Long.parseLong(message);
mChronometer.setBase(time);
正在发送的消息来自这里的代码:
this.sendWebRequestStopTimer(mChronometer.getBase())
虽然这确实会导致时间被调整,但通常会稍微偏离不到一秒,通常为 100-400 毫秒。我认为这是因为尽管 NTP 服务器相同,但每个设备的时间略有不同。
所以简而言之,有没有更好的方法来调整代码,以便子设备将显示与父设备完全相同的时间(点击暂停的设备)?
注意:任何设备都可以播放/暂停/停止秒表。没有任何设备负责控制此秒表功能。所以device 1
可以启动计时器,device 2
可以暂停它,也device 3
可以恢复它。
解决方案
让按下暂停/停止的设备将其时间发送到服务器,并将其回显给所有其他设备。除了硬连线专用网络之外,真的没有其他方法可以做到这一点。即便如此,您仍然会在 10 毫秒范围内产生一些差异。当然,这可能会导致某些设备显示较小的数字,看起来像是回到了过去。没有真正的方法可以避免这种情况。
推荐阅读
- javascript - 多个图像并单击图像进行预览 - Angular
- sql - 替换 SQL 查询中的列值而不更新原始表
- firebase - 获取具有相同字段值的所有文档
- c++ - 改变数组结尾
- r - pivot_longer 与 names_pattern
- amazon-web-services - 用于列出我有权访问的角色和账户的 AWS CLI 命令
- javascript - React:添加具有动态参数的嵌入脚本
- php - 在 Yii 中显示来自多个表 PHP 和 MySQL 的数据
- reactjs - Snowpack 没有重新加载
- elasticsearch - Elasticsearch 术语查询很慢?