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应用程序中的两个玩家都会出现倒计时.对我而言,重要的是他们在屏幕上看到相同的数字并同时播放音乐.
我愿意接受所有提示.
就 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/
希望这可以帮助。
归档时间: |
|
查看次数: |
1202 次 |
最近记录: |