socket.io中供单个用户使用的单人间

时间:2019-02-01 09:06:06

标签: node.js angularjs socket.io

我正在研究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'});

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

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

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

1 个答案:

答案 0 :(得分:0)

通过查看此信息,我知道您正在做正确的事情,req.body中发生的我认为的问题,我认为您只是存储最后一个用户的roomID,因此当您致电发出方法,它始终只会将事件触发到一个房间

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

为了将事件发送给2个不同的用户,出于测试目的,应为每个用户更改roomId,请使用2个不同的浏览器进行测试

让我知道是否需要更多帮助