我目前正在尝试构建一个本质上需要跨服务器和每个客户端进行良好时间同步的应用程序.我的应用程序有替代设计可以消除这种同步需求,但是当我的应用程序不存在时,我的应用程序很快就会开始吮吸.
如果我遗漏了一些东西,我的基本问题是:在同一时刻在多个地点发起一个事件.我能说的最好,这样做的唯一方法就是需要某种时间同步,但我可能错了.我尝试过以不同方式对问题进行建模,但这一切都回到了a)一个糟糕的应用程序,或者b)需要时间同步.
让我们假设我真的需要同步时间.
我的应用程序基于Google AppEngine构建.虽然AppEngine不保证其服务器上的时间同步状态,但通常它是非常好的,大约几秒钟(即优于NTP),但是有时它会糟糕地说,比如大约10秒钟同步 我的应用程序可以处理2-3秒不同步,但10秒对于用户体验是不可能的.所以基本上,我选择的服务器平台没有提供非常可靠的时间概念.
我的应用程序的客户端部分是用JavaScript编写的.我们再次遇到客户端没有可靠的时间概念的情况.我没有做任何测量,但我完全期望我的一些最终用户拥有设置为1901,1970,2024等的计算机时钟.基本上,我的客户端平台没有提供可靠的时间概念.
这个问题开始让我有点生气.到目前为止,我能想到的最好的事情就是在HTTP之上实现像NTP这样的东西(这并不像听起来那么疯狂).这可以通过在因特网的不同部分中调试2或3个服务器来工作,并且使用传统方式(PTP,NTP)来尝试确保它们的同步至少在几百毫秒的量级.
然后,我将创建一个JavaScript类,该类使用这些HTTP时间源(以及可从XMLHTTPRequest获得的相关往返信息)实现NTP交集算法.
正如你所知,这个解决方案也很糟糕.它不仅非常复杂,而且只能解决问题的一半,即为客户提供当前时间的良好概念.然后,我必须在服务器上妥协,或者允许客户端在发出请求时根据它们告诉服务器当前时间(大安全性禁止,但我可以减轻一些更明显的滥用此行为),或让服务器向我的一个神奇的HTTP-over-NTP服务器发出单个请求,并希望该请求足够快地完成.
这些解决方案都很糟糕,我迷失了.
提醒:我想要一堆Web浏览器,希望多达100个或更多,能够在同一时间触发事件.