两个用户在socket.io中获得控制权访问 - 竞争条件

时间:2017-09-26 05:02:52

标签: javascript node.js socket.io race-condition

有两个或更多用户收到可用房间的通知。

我如何阻止它,并使其一次只能通知一个用户。

socket.on('Check', function (room) {

io.in(room).clients((error, clients) => {

    var hasPush = false;

    clients.forEach(function (clientId) {

        var client = io.sockets.connected[clientId];                                      

            if (client.hasPush) {                              

                hasPush = true;                 
                socket.emit('busy', room);
                return;
            }

    }, this);

    if (!hasPush) {
        socket.hasPush = true;                        
        socket.emit('available', room);
    }
  });                                      

});

我试图阻止使用共享变量,但这并没有起作用。

rooms = {};
socket.on('check', function (room) {

    if (!rooms[room]) {
        rooms[room] = true;
    }
    else {
        socket.emit('busy', room);
        return;
    }

    .......

    rooms[room] = false;
}

1 个答案:

答案 0 :(得分:0)

现在我添加了两台带有nginx和redis的服务器,redis-lock为我工作。