我正在使用PubNub构建一个聊天应用。现在的问题是从app / frontend的角度来看,它应该如何获得时间(服务器时间)。如果每条消息都发送到服务器,我可以在那里获得服务器时间。但是通过像PubNub这样的第三方服务,我该如何管理呢?由于应用程序将消息发送到PubNub而不是我的服务器。我不想依赖当地时间,因为用户可能有不准确的时钟。
我想到的最简单的解决方案是:当应用启动时,获取服务器时间。记录本地时间和服务器时间之间的差异(diff = Date.now() - serverTime
)。发送消息时,时间为Date.now() - diff
。到目前为止这是正确的吗?
我想这个解决方案假设0传输(或延迟)时间?是否有更正确或推荐的方法来实现它?
答案 0 :(得分:2)
您的用例可能是pubnub.time()存在的原因。
事实上,他们甚至有一个描述漂移计算的代码示例。
// 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 );
});