Мне нужно запустить ту же задачу на разных вкладках/браузерах/клиентах в одно и то же время. Как можно ближе (за одну секунду, даже миллисекунду).Начать задачу одновременно с разными браузерами/клиентами?
То, что я сейчас
ОБЕ клиенты посылают запрос на сервер с помощью AJAX, когда они начинают вебсайт.
-Сервер принимает текущую метку времени (в секундах) и удаляет ее с 10 секунд. Затем отправляет оставшееся время клиентам.
-Клиенты получают оставшееся время, генерируют временную метку, добавляют оставшееся время в текущее время и ждут, пока он будет таким же или большим, а затем начните задачу.
PHP (Server)
<?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 буду правильный путь?
-Это единственный способ сделать это?
-Можете ли это сделать лучше?
-Как можно свести к минимуму разницу во времени между разными компьютерами/браузерами/вкладками.
Я предполагаю, что я должен учитывать времена запроса/ответа и делать с ними некоторые расчеты, но прежде чем продолжить, я хочу убедиться, что нет другого, лучшего способа достижения моей цели и что я не собираюсь ужасно неправильно с этим решением.