build立一个聊天应用程序:如何获得时间

我正在用PubNub创build一个聊天应用程序。 现在的问题是从app / frontend的angular度来看,它应该如何获得时间(服务器时间)。 如果每条消息都发送到服务器,我可以在那里得到服务器的时间。 但是像PubNub这样的第三方服务,我该如何pipe理呢? 由于应用程序发送消息到PubNub而不是我的服务器。 我不想依赖当地时间,因为用户可能会有不准确的时钟。

我想到的最简单的解决scheme是:当应用程序启动时,获得服务器时间。 logging本地时间和服务器时间之间的差异( diff = Date.now() - serverTime )。 发送消息时,时间将是Date.now() - diff 。 这到目前为止是正确的吗?

我想这个解决scheme假设0传输(或等待时间)的时间? 有没有一个更正确的或推荐的方法来实现呢?

你的用例可能是为什么pubnub.time()存在的原因。

事实上,他们甚至有一个描述漂移计算的代码示例。

https://github.com/pubnub/javascript/blob/1fa0b48227625f92de9460338c222152c853abda/examples/time-drift-detla-detection/drift-delta-detection.html

 // Drift Functions function now(){ return+new Date } function clock_drift(cb) { clock_drift.start = now(); PUBNUB.time(function(timetoken){ var latency = (now() - clock_drift.start) / 2 , server_time = (timetoken / 10000) + latency , local_time = now() , drift = local_time - server_time; cb(drift); }); if (clock_drift.ival) return; clock_drift.ival = setInterval( function(){clock_drift(cb)}, 1000 ); } // This is how you use the code // Periodically Get Latency in Miliseconds clock_drift(function(latency){ var out = PUBNUB.$('latency'); out.innerHTML = "Clock Drift Delta: " + latency + "ms"; // Flash Update PUBNUB.css( out, { background : latency > 2000 ? '#f32' : '#5b5' } ); setTimeout( function() { PUBNUB.css( out, { background : '#444' } ); }, 300 ); });