我需要在同一時間在不同的標籤頁/瀏覽器/客戶端上啓動相同的任務。儘可能接近(同一秒,甚至毫秒)。在不同的瀏覽器/客戶端同時啓動任務?
我現在所擁有的
導向軸客戶端通過AJAX當他們開始在網站發送請求到服務器。
- 服務器將當前時間戳記(秒)並從10秒中刪除它。然後將剩餘時間發回客戶端。
- 客戶端接收剩餘時間,生成時間戳,將剩餘時間添加到當前時間並等待至相同或更大,然後開始的任務。
PHP(服務器)
<?php
// Remove dot on timestamp
$timeStamp = str_replace('.', '', microtime(true));
// Make it same as JS one (13 symbols)
if (strlen($timeStamp) > 13) {
$timeStamp = substr($timeStamp, 0, -1);
}
// I want last 4 digits - 1st is second, rest 3 are microseconds
$timeStamp = substr($timeStamp, 9, 4);
// Remove time from 10 seconds and we get how many seconds left till start (meaning we start task every 10 seconds on server)
echo 10000 - $timeStamp;
JS(客戶端)
$.get('ajax.php', function(data){
// Current date
var newDate = new Date().getTime();
// Start date
playDate = newDate + parseInt(data);
// Waiting for current date to be same or greater than start date
while (true){
if (playDate <= new Date().getTime()){
alert('DONE'); // It is pretty close, but not excatly
break;
}
}
});
我的問題(一個或多個)
-Am我要以正確的方式?
- 這是做到這一點的唯一方法嗎?
可以做得更好嗎?
- 如何最小化不同計算機/瀏覽器/選項卡之間的時間差異。
我想我應該考慮請求/響應時間,並與他們做一些計算,但在繼續之前,我想確保沒有其他更好的方法來實現我的目標,我不會去這個解決方案非常錯誤。