首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分布式时间同步和web应用程序

分布式时间同步和web应用程序
EN

Stack Overflow用户
提问于 2009-01-11 05:49:48
回答 4查看 3.8K关注 0票数 9

我目前正在尝试构建一个应用程序,它本质上需要跨服务器和每个客户端的良好时间同步。我的应用程序有其他设计可以消除这种同步需求,但是当我的应用程序不存在时,它很快就会变得很糟糕。

如果我错过了什么,我的基本问题是:在完全相同的时刻在多个位置触发一个事件。据我所知,实现这一点的唯一方法需要某种时间同步,但我可能错了。我尝试过以不同的方式对问题进行建模,但问题要么是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服务器发出一个请求,并希望该请求足够快地完成。

这些解决方案都很烂,我很迷茫。

提醒:我想要一堆浏览器,希望有100个或更多,能够在完全相同的时间触发一个事件。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-11 06:39:02

在我看来,您似乎需要从多个不同位置的服务器收听广播事件。既然您可以接受2-3秒的变化,那么您就可以将所有客户端放入长生命周期的comet样式的请求中,然后从服务器获得响应?在我看来,客户不需要以这种方式处理时间?

你可以使用ajax来做到这一点,这样你就可以在等待新数据时̈́避免任何客户端锁定。

我可能完全漏掉了一些东西。

票数 2
EN

Stack Overflow用户

发布于 2009-01-11 05:58:22

时间同步是很难得到正确的,在我看来,这是错误的方式。您需要一个事件系统,它可以在每次调度事件时通知注册的观察者(observer pattern)。将同时(或尽可能接近)通知所有观察者,从而消除时间同步的需要。

为了适应延迟,应该向浏览器发送事件分派的时间戳,并且它等待的时间应该比您预期的最大延迟稍长一点。这样,所有事件都将在所有浏览器上同时启动。

票数 1
EN

Stack Overflow用户

发布于 2009-01-11 09:09:29

如果你可以假设时钟是合理稳定的--也就是说,它们设置得不对,但以或多或少的正确速率滴答作响。

让服务器从单个定义的源(例如,您的服务器之一,或数据库服务器等)获取它们的偏移量。

然后让每个客户端计算它与服务器的偏移量(如果您想要更高的准确性,可能会出现往返的复杂情况)。

存储它,然后您在每个客户端上的组合偏移量,以在正确的时间触发事件。

代码语言:javascript
复制
(client-time-to-trigger-event) = (scheduled-time) + (client-to-server-difference) + (server-to-reference-difference)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/432432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档