得到客户端响应后如何停止定时器运行?

时间:2019-01-02 12:09:08

标签: node.js socket.io

我正在开发一个游戏,我需要将计时器的每时每刻发送给套接字房间中的用户。如果我的计时器是30秒,我想在30秒钟内从客户端之一回复。我无法定义全局变量来停止计时器,因为服务器端可能正在运行多个游戏。我想检查服务器是否获得响应在那30秒内

socket.on('decidedturn_ack', function (game_id) {  
   socket.join("room-"+game_id);
   var timeLeft = 30;
   var timerId = setInterval(countdown, 1000);
   function countdown() {
         if (timeLeft == 0) {
                clearTimeout(timerId); 
               io.sockets.in("room-"+game_id).emit('time_up',arr);
         } else { 
              io.sockets.in("room-"+game_id).emit('timeLeft',timeLeft);
              timeLeft--;
         }
   }

});

1 个答案:

答案 0 :(得分:0)

由于不是全局变量,因此可以将计时器存储在每个连接的套接字唯一的套接字对象上。

var timeLeft = 30;
var timerId = setInterval(countdown, 1000);
socket.timerId = timerId; // assign the timer to the socket for use later..

收到回复后,请执行以下操作:

socket.on('decidedturn_response', function (game_id) { 
    clearTimeout(socket.timerId); // clears the timer on response
});