我正在研究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收到它。
我找不到任何解决方案。我在这里做错了什么?请帮忙。
答案 0 :(得分:0)
通过查看此信息,我知道您正在做正确的事情,req.body
中发生的我认为的问题,我认为您只是存储最后一个用户的roomID,因此当您致电发出方法,它始终只会将事件触发到一个房间
req.io.sockets.in(roomId).emit('data',{roomId:roomId,msg:'message'});
为了将事件发送给2个不同的用户,出于测试目的,应为每个用户更改roomId,请使用2个不同的浏览器进行测试
让我知道是否需要更多帮助