我想根据服务器的时间驱动一个 setTimeout 循环,仅几秒钟。
因此,当服务器上的秒数为 30 时,某些功能会在所有客户端上运行。至关重要的是它们不会与服务器完全不同步,因为每隔 45 秒就会有一个 CRON 作业在服务器上运行,这对于系统正常运行很重要。
如果客户端与服务器有几秒钟的关系,这是可以的,客户端不需要相互同步。
我正在使用 Jquery 库。
我想根据服务器的时间驱动一个 setTimeout 循环,仅几秒钟。
因此,当服务器上的秒数为 30 时,某些功能会在所有客户端上运行。至关重要的是它们不会与服务器完全不同步,因为每隔 45 秒就会有一个 CRON 作业在服务器上运行,这对于系统正常运行很重要。
如果客户端与服务器有几秒钟的关系,这是可以的,客户端不需要相互同步。
我正在使用 Jquery 库。
使用 node.js 和 Socket.io
var io = require('socket.io').listen(80);
io.sockets.on('connection', tick);
function tick(socket){
socket.emit("tick");
setTimeout(function(){tick(socket)}, 30000);
}
客户:
var socket = io.connect('http://serveraddr');
socket.on('tick', function (data) {
doSomething()
});
这使用 Socket.io 为服务器直接控制客户端。
在这种情况下,您可以使用长轮询。客户端向服务器发送请求,服务器在一段时间后发送响应。在回调时,您可以执行代码。
当客户端第一次加载时,它会询问服务器时间。或者您可以将当前服务器时间渲染到 JS 中。
然后客户端获取当前本地时间,计算两者之间的增量并使用该增量计算任何给定时刻的当前服务器时间。当然,这种方法假定两个时钟不会偏离太多(它们确实不应该)。
根据您的解决方案(AJAX、页面重新加载等),您可以在下次调用完成时将秒数传递给客户端。这可以包含在对客户呼叫的每个响应中。
例如,客户端调用服务器,服务器响应 56 秒,客户端在 56 秒内执行下一次调用。