1

サーバーの時間、秒のみに基づいて setTimeout ループを実行したいと思います。

したがって、サーバーの秒数が 30 の場合、すべてのクライアントで何らかの機能が実行されます。システムが正常に機能するために重要な、たとえば 45 秒ごとにサーバー上で CRON ジョブが実行されるため、サーバーとの完全な同期が失われないようにすることが重要です。

クライアントがサーバーから数秒離れていても問題ありません。クライアントを相互に同期する必要はありません。

Jquery ライブラリを使用しています。

4

4 に答える 4

1

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 を使用します。

于 2012-04-08T11:29:13.720 に答える
0

この場合、ロング ポーリングを使用できます。クライアントはサーバーにリクエストを送信し、サーバーはしばらくしてからレスポンスを送信します。コールバックでコードを実行できます。

于 2012-04-08T11:21:13.530 に答える
0

クライアントが最初にロードするとき、サーバー時間を要求します。または、現在のサーバー時間を JS にレンダリングすることもできます。

次に、クライアントは現在のローカル時間を取得し、2 つの間のデルタを計算し、そのデルタを使用して、任意の時点での現在のサーバー時間を計算します。もちろん、このアプローチは、2 つのクロックが大きくずれていないことを前提としています (実際にはそうであってはなりません)。

于 2012-04-08T11:24:26.010 に答える
0

ソリューション (AJAX、ページのリロードなど) によっては、次の呼び出しを行う必要があるときにクライアントに秒数を渡すことができます。これは、クライアントの呼び出しに対する各応答に含めることができます。

たとえば、クライアントがサーバーを呼び出し、サーバーが 56 秒で応答し、クライアントは 56 秒後に次の呼び出しを実行します。

于 2012-04-08T11:25:26.730 に答える