Всем привет, пользуюсь Websocket и встал вопрос важный:
Вот у меня есть например таймер, который отсылает данные всем юзерам, но суть в том, что почему то у клиента на котором была нажата кнопка таймер работает корректно, с миллесекундами, а у других через секунду, тоесть вот console.log того что приходит с сервера у юзера который запустил таймер:
Вот у юезара который подключился:
Суть в том что у юзеров которые подключились почему-то пролетают миллисекунды, и показывает не "9.9, 9.8, 9.7", а "9.9, 8.9, 7.9".
$(".btn").click(function(e) {
initTick = now();
setTimeout(tick, 20);
});
var ws = new WebSocket("ws://localhost:2346");
function now() {
return window.performance ? window.performance.now() : Date.now();
}
var count = 30000;
var delay = 20; //20 ms. This will be only indicative. There's no guarantee the browswer will call the function after exactly this time
var initTick = 0;
var timerElement = $(".timer");
function tick() {
var remaining = (count - (now() - initTick)) / 1000;
remaining = remaining >= 0 ? remaining : 0;
var secs = remaining.toFixed(1);
var data = {
time: secs,
};
ws.send(JSON.stringify(data));
if (remaining) {
setTimeout(tick, delay);
}
}
ws.onmessage = (response) => {
var data = JSON.parse(response.data);
$(".timer").html(data.time);
console.log(data);
};
<?
require_once __DIR__ . '/../vendor/autoload.php';
use Workerman\Worker;
$wsWorker = new Worker('websocket://0.0.0.0:2346');
$wsWorker->count = 1;
$wsWorker->onMessage = function ($connection, $data) use ($wsWorker) {
foreach ($wsWorker->connections as $clientConnection) {
$clientConnection->send($data);
}
};
Worker::runAll();