【问题标题】:single room for single user in socket.iosocket.io 中的单人房间
【发布时间】:2019-06-25 19:59:43
【问题描述】:

我正在研究 nodejs 和 angularjs。我正在使用 socket.io 来显示正在进行的进程的进度。

在客户端

let socket = io.connect();
socket.emit('room',{roomId:user_id});

socket.on('data',function(data){
 console.log("data -=- ",data);
})

在服务器端

io.on('connection',function(socket){
  socket.on('disconnect', function(de) {
    console.log("disconnected",de)
  });
  socket.on('room',function(d){
    socket.join(d.roomId);
  })
})

app.use(function(req,res,next){
 req.io = io; next();
});

我在正文中发送带有我的帖子请求的 roomId;当调用 api 时,我从 req.body 收集 roomId,然后发出事件。

req.io.sockets.in(roomId).emit('data',{roomId:roomId,msg:'message'});

当我在本地主机上为单个用户运行它时,它工作正常。但是,当我调用为两个具有不同 roomId 的独立用户发出事件的 api 时。最先请求的用户一无所获。

如果 roomId = 1 的 user1 刚好在 roomId = 2 的 user2 之前连接,则 user1 不会收到“数据”事件。只有 user2 正在接收它。

我找不到任何解决方案。我在这里做错了什么?请帮忙。

【问题讨论】:

    标签: node.js angularjs socket.io


    【解决方案1】:

    通过查看这个,我知道你做的每一件事都是正确的,我认为在req.body 中发生的问题我认为你只是存储了最后一个用户的房间ID,所以当你调用 emit 方法时它总是只向一个房间触发事件

    req.io.sockets.in(roomId).emit('data',{roomId:roomId,msg:'message'});
    

    为了将事件发送给 2 个不同的用户,您的 roomId 应该为每个用户更改以进行测试,使用 2 个不同的浏览器进行测试可能会起作用

    如果您需要更多帮助,请告诉我

    【讨论】:

    • 现在只需在您编写发射函数的函数中记录 roomID 的值,看看该值是否在变化
    猜你喜欢
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2017-05-10
    • 2019-03-02
    • 2011-12-02
    • 1970-01-01
    相关资源
    最近更新 更多