大家好,我确信此问题已被考虑过甚至解决过;我只是不知道我的所有选择是怎样的。非常感谢您的想法,任何有用信息的链接......即使您没有实际的代码/实现来分享。非常感谢!
让我们说:
互联网上有一堆节点。这些可以是www浏览器,也可以是自定义胖客户端应用程序。
这些节点事先知道有一台服务器(运行一些服务/应用程序)。如有必要,节点也可以通过此中心服务了解彼此。
任何节点都可以将数据发送到中央服务器(例如,用户交互)。任何节点都可以从中央服务器(Ajax风格)中提取数据。
现在的问题是:
如果这些节点需要实时互动......
和
如果我需要在每个节点上显式显示当前服务器时间或当前本地时间(节点)或自会话开始以来的当前时间...
那么,我该如何解决节点时钟之间的差异,服务器和节点之间的时钟差异,更不用说不可预测的通信信道延迟了?
用例:用户在时间T在她的节点上触发事件。我不仅需要处理此事件(本地和服务器),我还需要传达它的时间恰好相对于所有其他人而言。
我怀疑在TCP / IP堆栈的一些模糊,低级别区域中已经存在一些时间同步协议,但是在应用层级别可用的是什么...尤其是www级别?
答案 0 :(得分:1)
一些分布式系统将时间负责放在基础架构服务上:当您部署系统X时,您必须已经将操作系统配置为使用时间来使用NIST等服务。只要分布式的成员保持在(比方说)彼此之间的一两秒内,事情就可以正常工作。
在您的情况下,不能假定任意浏览器同步。因此,当您拥有一个hub-spoke架构时,让服务器成为“Now”的守护者。当每个客户端连接时,它确定相对于服务器Now的“localTime”。然后将发送给远程消费的所有时间标准化为相对于全局Now。
你说你需要精确确定事件处理的时间吗?为什么?这真的很重要吗?我可以看到任何一个节点处理事件的顺序很有趣,但是你会从两个节点做事的确切顺序推断出什么。
Node A processed event 76
Node B processed event 77
Node A Processed event 77
与
Node A processed event 76
Node A processed event 77
Node B Processed event 77
为什么会这么重要? (爱因斯坦甚至可能会争辩说你无法保证对相对论的了解)。
答案 1 :(得分:1)
处理此类情况的最佳方法是始终使用中央服务器上的时间。我假设如果你的中央服务器实际上是数据中心中几个服务器的集群,那么所有这些服务器都有同步的时钟。您自己的服务员的时钟是众所周知的,在您的控制之下,所有外部节点都是不可预测的,无法依赖。您应该能够至少检测外部节点的时区,因此在显示时间时将您自己的时间转换为用户节点的区域。
答案 2 :(得分:1)
由于它是ajax,客户端可以将本地时区信息(getTimezoneOffset())发送到服务器。每个服务器端进程都知道它自己的时区,可以将其转换为中央时区,也可以将自己的时区信息发送到中央服务器。如果真正的任务是协调时间,则每个进程都需要以中央进程可以理解和传播的方式实现区域设置。