Socket.io:将套接字加入服务器中的房间后,无法在客户端中获取发射的数据

时间:2019-08-27 10:27:19

标签: reactjs express socket.io

我正在构建一个NodeJS Express应用程序,该应用程序将socket.io用于服务器端的实时服务。在客户端,我将ReactJS与socket.io-client模块一起使用。

我正在尝试创建一个房间ID,并向它们添加一个套接字,然后从服务器向加入该房间的客户端/套接字发出一条消息。套接字的join方法的回调函数已成功调用,并且服务器端没有错误。但是,“发出”消息无法到达客户端。

我尝试了不带房间ID的名称空间发射,并且消息已成功发送到客户端。

我尝试的版本:socket.io:2.2.0和socket.io-client:2.2.0

服务器端:

...

// Pending namespace
const pendingNSP = io.of('/pending');

// Joining the socket to Room ID
const battleId = battle._id;
const roomId = `room-${battleId.toString()}`;

socket.join(roomId, () => {
    if (!battle.isAvailable) {


        // pendingNSP.in(roomId).emit('battleStart', roomId);

        // socket.in(roomId).emit('battleStart', battle._id);

        // io.sockets.in(roomId).emit('battleStart', battle._id);

        // socket.to(roomId).emit('battleStart', battle._id);
        // socket.broadcast.to(roomId).emit('battleStart', battle._id);

        // --- The code above does not work ---

        pendingNSP.emit('battleStart', battle._id);  // <-- This works

        return battle;
    }
});

客户端:

componentDidMount() {
    ...
    this.handleSocketEvents().enterPending(artistId);
    this.handleSocketEvents().on();
}

handleSocketEvents = () => {

    const io = getIO(this.state.socketEndpoint);  // socketEndpoint --> '/pending'

    return {
        enterPending: (artistId) => {
            io.emit('enterPending', {
                artistId: artistId
            });
        },
        on: () => {
            io.on('battleStart', (battleId) => {
                this.setState({battleId: battleId});
                this.setState({redirectBattle: true});
            });

            io.on('error', () => {
                io.disconnect(true);
                this.setState({errorMsg: "Socket error"})
            });
        }
    }
};

正如我提到的,无房间发射原理确实可行,但是,尝试向房间发射不会给客户端带来任何结果

我在以下链接中发现了一个非常相似的问题,但是我无法从评论中受益:Socket.io - Cannot emit to a specific room but can emit to everyone

任何帮助将不胜感激。 预先感谢

0 个答案:

没有答案