gpt4 book ai didi

node.js - 构建聊天应用程序 : How to get time

转载 作者:太空宇宙 更新时间:2023-11-03 21:59:49 28 4
gpt4 key购买 nike

我目前正在使用 PubNub 构建一个聊天应用程序。现在的问题是从应用程序/前端的角度来看,它应该如何获取时间(服务器时间)。如果每条消息都发送到服务器,我就可以在那里获取服务器时间。但是对于像 PubNub 这样的第三方服务,我该如何管理呢?由于应用程序将消息发送到 PubNub 而不是我的服务器。我不想依赖本地时间,因为用户的时钟可能不准确。

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

我猜这个解决方案假设传输(或延迟)时间为 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 );
});

关于node.js - 构建聊天应用程序 : How to get time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29872891/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com