如何在用户断开连接时停止服务器端计时器? (的node.js / socket.io)

时间:2017-08-19 10:56:49

标签: javascript node.js socket.io

我有一些服务器端计时器,适用于socket.io:

// timer function
    function startTimer() {
         var countdown = 15000;
         var serverInterval = setInterval(function () {
            countdown -= 1000;
            socket.in(room_name).emit('timer', {countdown: countdown});
         }, 1000);
     }

// timer usage      
     socket.on("start timer", function() {
         startTimer()
     }

但是当用户断开连接时,我想clearInterval并停止该计时器:

socket.on('disconnect', function() {
      clearInterval(serverInterval);
});

导致错误的原因" serverInterval未定义"。

如何在当前文档中创建变量global,但在整个项目中不是全局变量,并在用户断开连接时停止我的服务器端计时器?

2 个答案:

答案 0 :(得分:1)

您可以使用函数存储serverInterval的上下文,如

var ServerInterval = (function () {
    var serverInterval;
    return {
            set: function (obj) {
            serverInterval = obj;
            },
            get : function() {
                return serverInterval;
            }
    };

})();

// timer function
    function startTimer() {
         var countdown = 15000;
         ServerInterval.set(setInterval(function () {
            countdown -= 1000;
            socket.in(room_name).emit('timer', {countdown: countdown});
         }, 1000));
     }

// timer usage      
     socket.on("start timer", function() {
         startTimer()
     }

socket.on('disconnect', function() {
      clearInterval(ServerInterval.get());
});

然后使用getter / setter

调用它

答案 1 :(得分:-1)

通过在全局范围内定义变量使变量成为全局变量,而不是var serverInterval = ...应为global.serverInterval = ...

或者,更好的是,将变量附加到套接字对象:socket.serverInterval = ...,并在断开连接中clearInterval(socket.serverInterval)