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

标签 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;
}

最佳答案

现在我已经添加了两台服务器,分别是 nginx 和 redis,redis-lock 对我有用。

关于javascript - 两个用户在 socket.io 中获得控制访问 - 竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46418146/

相关文章:

javascript - jquery on() 未注册第一次点击

javascript - 如何从自定义 javascript 访问 redux 存储

node.js - 按顺序重播消息

javascript - 如何动态渲染ejs中输入的选定选项

javascript - 将 JavaScript `require` 转换为 TypeScript

node.js - 我应该拆分 12Factor 应用程序代码库因子

node.js - 在断开连接事件中获取客户端当前所在的房间列表

javascript - socketio javascript 混淆

javascript - Socket.io,从客户端获得两个响应然后运行代码?

将 hsv 转换为十六进制的 Javascript 函数