Javascript 与JS客户端同步服务器秒数

Javascript 与JS客户端同步服务器秒数,javascript,jquery,cron,Javascript,Jquery,Cron,我想根据服务器的时间(仅秒)驱动一个setTimeout循环 因此,当服务器上的秒数为30时,某些功能将在所有客户端上运行。重要的是,它们不能与服务器完全不同步,因为服务器上每隔45秒就会有一个CRON作业运行,这对系统正常运行很重要 如果一个客户机在服务器上离开几秒钟,这是正常的,客户机不需要彼此同步 我正在使用Jquery库。您可以在本例中使用。 客户端向服务器发送请求,服务器在一段时间后发送响应。 在回调时,您可以执行代码。您可以在这种情况下使用。 客户端向服务器发送请求,服务器在一段时间

我想根据服务器的时间(仅秒)驱动一个setTimeout循环

因此,当服务器上的秒数为30时,某些功能将在所有客户端上运行。重要的是,它们不能与服务器完全不同步,因为服务器上每隔45秒就会有一个CRON作业运行,这对系统正常运行很重要

如果一个客户机在服务器上离开几秒钟,这是正常的,客户机不需要彼此同步

我正在使用Jquery库。

您可以在本例中使用。 客户端向服务器发送请求,服务器在一段时间后发送响应。 在回调时,您可以执行代码。

您可以在这种情况下使用。 客户端向服务器发送请求,服务器在一段时间后发送响应。
在回调时,您可以执行代码。

当客户端首次加载时,它会请求服务器时间。或者,您可以将当前服务器时间渲染到JS中


然后客户端获取当前本地时间,计算两者之间的增量,并使用该增量计算任意给定时刻的当前服务器时间。当然,这种方法假设两个时钟不会相差太多(它们确实不应该相差太多)。

当客户端首次加载时,它会请求服务器时间。或者,您可以将当前服务器时间渲染到JS中

然后客户端获取当前本地时间,计算两者之间的增量,并使用该增量计算任意给定时刻的当前服务器时间。当然,这种方法假设两个时钟不会相差太多(它们确实不应该相差太多)。

取决于您的解决方案(AJAX、页面重新加载等),您只需将下一次调用完成时的秒数传递给客户端即可。这可以包含在对客户呼叫的每个响应中

例如,客户端调用服务器,服务器应答56秒,客户端在56秒内执行下一次调用。

根据您的解决方案(AJAX、页面重新加载等),您可以在下一次调用完成时将秒数传递给客户端。这可以包含在对客户呼叫的每个响应中


例如,客户端调用服务器,服务器应答56秒,客户端在56秒内执行下一次调用。

使用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直接控制客户端。

使用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不支持套接字。这是一种聊天应用程序,所以我认为sockets是理想的,因为它可以模拟JAVA套接字在基于JAVA的聊天室中的工作方式。这会不会产生同样的行为?使用socket.emit的第一个脚本是否在服务器上运行?另一个在客户端上运行?我正在开发一个聊天项目,我正在努力解决用户拔出连接插头等问题,以避免出现一个充满幽灵用户的系统。@imperium2335,较新的浏览器,做一些研究。我已经研究过了,它似乎非常适合我的需要,但不知道如何安装它(我使用的是windows)?下载node.js。之后,在终端(cmd)中使用
npm install socket.io
,是的,第一个在服务器上运行,第二个在客户端运行。我认为JS不支持套接字。这是一种聊天应用程序,所以我认为sockets是理想的,因为它可以模拟JAVA套接字在基于JAVA的聊天室中的工作方式。这会不会产生同样的行为?使用socket.emit的第一个脚本是否在服务器上运行?另一个在客户端上运行?我正在开发一个聊天项目,我正在努力解决用户拔出连接插头等问题,以避免出现一个充满幽灵用户的系统。@imperium2335,较新的浏览器,做一些研究。我已经研究过了,它似乎非常适合我的需要,但不知道如何安装它(我使用的是windows)?下载node.js。在这之后,在终端(cmd)中使用
npm install socket.io
,是的,第一个在服务器上运行,第二个在客户端上运行。我想在大多数情况下,客户端上的秒数可能与服务器上的秒数完全不同。你是什么意思?时钟以不同的速度运行?我不这么认为。对于静态差异,我们有delta。我认为在大多数情况下,客户端上的秒数可能与服务器上的秒数完全不同?你是什么意思?时钟以不同的速度运行?我不这么认为。对于静态差异,我们有delta。是否需要一种偏移量,即接收和发送请求之间的延迟?因此,服务器在56秒时发送,但实际上客户端在3秒后得到56秒,因此需要在客户端上调整任何超时/间隔,以补偿最大延迟。对于非时间关键型应用程序,此方法确保客户端不会比预期早执行调用。延迟不会加起来,因为客户端每次调用都会得到一个新的已更正超时。具有测量延迟的真正“同步”有点复杂,因为您无法确定瓶颈是连接还是客户端或服务器上的处理