Estoy tratando de usar la biblioteca socket.io para crear un juego simple. El objetivo del juego es mostrar el mismo número a todos los conectados al sitio web.
var init = false var init_pause = false var send_message = false var number = 0 var pause_start = 0 var paused = false function rising_number() { if (!init) { paused = false number = 0 init = true init_pause = false } if (number < 1000) { number = number + 1 } else { paused = true if (!init_pause) { pause_start = new Date().getTime() send_message = true init_pause = true } //this just waits until 2 seconds pass if ((new Date().getTime() - pause_start) / 1000 >= 2) { init = false } } } setInterval(rising_number, 5) io.on("connection", socket => { function send_result() { if (!paused) { socket.emit('number', {number: number}) } if (send_message) { socket.emit('number', {ended: true}) console.log("round ended") send_message = false } } setInterval(() => send_result(), 50) }) Entonces, la función rising_number está calculando el número que se debe mostrar a los usuarios. Cuando el número es igual a 1000, el juego se detiene y la pausa se inicializa, por lo que la variable send_message ahora se establece en true . Cuando el usuario está conectado y send_message es true , se debe emitir ended: true . Pero probé la consola registrando la variable finalizada en la interfaz y se recibe aproximadamente el 50% de las veces, aunque "round ended" se registra en la consola cada vez que send_message es true . ¿Por qué sucede esto y hay alguna forma de solucionarlo?