【问题标题】:Why is the client not receiving the socket.io broadcast (rooms)?为什么客户端没有收到 socket.io 广播(房间)?
【发布时间】:2021-07-20 22:21:46
【问题描述】:

我的客户没有收到发送到房间的广播。如果我用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

【问题讨论】:

    标签: javascript node.js express socket.io


    【解决方案1】:

    根据documentation,如果你使用socket.to('room').emit(...)而不是io.in('room').emit(...),它将被广播到房间里的所有套接字除了发送者。这就是你的问题所在。

    socket.emit(...) 起作用的原因是因为您将其直接发送并且发送给发件人。

    这个emit cheatsheet 对于找出io/socketto 等的哪些组合会影响消息发送到哪里非常有用。

    【讨论】:

    • 我将socket.to(roomName).emit('join', currentUser); 替换为io.to(roomName).emit('join', currentUser);io.in(roomName).emit('join', currentUser);,但似乎都不起作用。我做错了吗?
    • 我原来的 io.to(roomName) 是错误的,必须是 io.in,正如您似乎已经发现的那样。似乎由于您使用的是命名空间,您甚至可能不得不使用io.of('/game').to(roomName).emit(...)。 Cheatsheet 在后一个示例中使用to 而不是in,也许它只是一个别名。我也不确定是.of('/game') 还是.of('game')
    • 是的,使用io.of('/game').in(roomName).emit('join', currentUser); 有效。而toin 是别名,根据docs。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-01-09
    • 2016-07-21
    • 2023-03-16
    • 2020-03-12
    • 2018-08-08
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多