杀死“个性化”间隔

时间:2017-08-20 00:07:31

标签: javascript node.js sockets

我已经制作了这个系统,因此用户可以登录我的网站并玩一个需要间隔时间的游戏。当用户完成播放我基本上想要杀死间隔。虽然一切似乎都运行良好,但是杀死间隔有一些问题。

以下是问题每当用户完成播放时,间隔就会被杀死,不仅是因为用户正在播放,还有所有人。这可能是因为我正在为一个区间分配一个变量,当一个用户完成游戏时我正在杀死interval,我是对的,那么它会杀掉其他区间吗?

以下是我为此问题编写的一些代码,

var user; //this is a variable that has all info about the user. (its not usually empty)
var usersPlaying = [];

socket.on('game', function(game) {

    if(game.type == "start"){
        usersPlaying.push({
            user_id: user.id
        });

        var game = setInterval(function(){
            if(findUser(user.id) !== undefined){
                console.log('Second passed!');
            }else{
                clearInterval(game); //stop the interval
            }
        }, 1000);
    }else if(game.type == "stop"){

        console.log("User has decided to quit playing the game!");
        usersPlaying.splice(usersPlaying.findIndex(user => user === user.id), 1); //remove user from playing

    }

});

由于我重写并简化了代码,因此可能会出现一些错误,否则很难帮助我。

无论如何,我怎么能这样做才能清除某个特定人的间隔?

谢谢!

2 个答案:

答案 0 :(得分:0)

setInterval调用返回唯一ID。您可以使用该ID清除该间隔计时器:

var uniqueId = setInterval(function () { /* ... */ }, 1000);  

稍后......

clearInterval(uniqueId);

会杀死那个特定的计时器。

我建议在usersPlaying数组中为每个用户存储uniqueId。

答案 1 :(得分:0)

将特定套接字的间隔存储在其自己的范围内:

var user; //this is a variable that has all info about the user. (its not usually empty)
var usersPlaying = [];

socket.on('game', function(game) {

    if(game.type == "start"){
        usersPlaying.push({
            user_id: user.id
        });

        socket.game = setInterval(function(){
            if(findUser(user.id) !== undefined){
                console.log('Second passed!');
            }else{
                clearInterval(socket.game); //stop the interval
            }
        }, 1000);
    }else if(game.type == "stop"){

        console.log("User has decided to quit playing the game!");
        usersPlaying.splice(usersPlaying.findIndex(user => user === user.id), 1); //remove user from playing

    }

});

所以你也可以在断开连接时杀掉它:

socket.on('disconnecting',function(){
  if(socket.game){clearInterval(socket.game);}
});  

编辑:

var user; //this is a variable that has all info about the user. (its not usually empty)

更好地存储套接字范围内的所有内容(服务器中的每个客户端套接字对象都有自己的" user"密钥,而不是使用丑陋的全局变量

因此将其存储为socket.user = {id:"foo"},您可以访问该客户端执行套接字事件请求的特定用户对象,如if(findUser(socketuser.id) !== undefined){