Socket.io同步倒计时?

enu*_*car 7 javascript asynchronous node.js socket.io

在我的服务器端脚本中,我同时调用两个emits,看起来像这样.

if (songs.length > 0) {
    socket.emit('data loaded', songs);
    socket.broadcast.to(opponent).emit('data loaded', songs);
}
Run Code Online (Sandbox Code Playgroud)

一个是为了对手,另一个是为了自己.

我的问题是,当加载数据时,我的Android应用程序中的两个玩家都会出现倒计时.对我而言,重要的是他们在屏幕上看到相同的数字并同时播放音乐.

我愿意接受所有提示.

SUN*_*N K 1

就 js 计时器而言,会有少量差异。我们可以通过减少延迟时间(即服务器的请求时间和响应时间之间的差异)来减少时间差异。

function syncTime() {
console.log("syncing time")
var currentTime = (new Date).getTime();

res.open('HEAD', document.location, false);
res.onreadystatechange = function()
{
    var latency = (new Date).getTime() - currentTime;
    var timestring = res.getResponseHeader("DATE");
    systemtime = new Date(timestring);
    systemtime.setMilliseconds(systemtime.getMilliseconds() + (latency / 2))
};
res.send(null);
}
Run Code Online (Sandbox Code Playgroud)

需要计算发送请求和返回响应之间所用的时间,将该值除以 2。这将给出延迟的粗略值。如果将其添加到服务器的时间值中,您将更接近真实的服务器时间(差异将以微秒为单位)

参考: http: //ejohn.org/blog/accuracy-of-javascript-time/

希望这可以帮助。