为什么客户端收不到 socket.io 广播(房间)?
Why is the client not receiving the socket.io broadcast (rooms)?
我的客户端收不到发送到房间的广播。如果我用 socket.emit('join', currentUser);
替换 socket.to(roomName).emit('join', currentUser);
客户端会收到广播,但我想在这里使用房间。任何帮助将不胜感激。
app.js
// Game
app.get('/game', (req, res) => {
const cookies = req.cookies;
const currentUser = cookies['current_user'];
const roomName = cookies['room_name'];
if (roomName) {
res.render('pages/game', {
room: roomName
});
io.of('/game').on('connection', socket => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
socket.join(roomName);
socket.to(roomName).emit('join', currentUser);
});
} else {
res.redirect('/login');
}
});
game.ejs
const socket = io("/game");
socket.on('join', function(user) {
console.log(`${user} joined`);
});
另外,我可以替换这个吗:
if (roomName) {
// stuff
} else {
// other stuff
}
有了这个:
if (!roomName) {
// other stuff
return;
}
// stuff
根据 documentation,如果您使用 socket.to('room').emit(...)
而不是 io.in('room').emit(...)
,它将被广播到房间中的所有插座 除了发送者 。这就是你的问题所在。
socket.emit(...)
起作用的原因是因为您直接发送它并且 仅 给发件人。
这个 emit cheatsheet 对于找出 io
/socket
和 to
等的哪些组合影响消息发送到的位置非常有用。
我的客户端收不到发送到房间的广播。如果我用 socket.emit('join', currentUser);
替换 socket.to(roomName).emit('join', currentUser);
客户端会收到广播,但我想在这里使用房间。任何帮助将不胜感激。
app.js
// Game
app.get('/game', (req, res) => {
const cookies = req.cookies;
const currentUser = cookies['current_user'];
const roomName = cookies['room_name'];
if (roomName) {
res.render('pages/game', {
room: roomName
});
io.of('/game').on('connection', socket => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
socket.join(roomName);
socket.to(roomName).emit('join', currentUser);
});
} else {
res.redirect('/login');
}
});
game.ejs
const socket = io("/game");
socket.on('join', function(user) {
console.log(`${user} joined`);
});
另外,我可以替换这个吗:
if (roomName) {
// stuff
} else {
// other stuff
}
有了这个:
if (!roomName) {
// other stuff
return;
}
// stuff
根据 documentation,如果您使用 socket.to('room').emit(...)
而不是 io.in('room').emit(...)
,它将被广播到房间中的所有插座 除了发送者 。这就是你的问题所在。
socket.emit(...)
起作用的原因是因为您直接发送它并且 仅 给发件人。
这个 emit cheatsheet 对于找出 io
/socket
和 to
等的哪些组合影响消息发送到的位置非常有用。