Reactjs 套接字IO在加入房间后无法接收消息

Reactjs 套接字IO在加入房间后无法接收消息,reactjs,express,socket.io,react-redux,Reactjs,Express,Socket.io,React Redux,我正在构建一个应用程序,允许你加入游戏,然后从游戏中的其他玩家那里接收更新。在添加房间功能之前,套接字工作正常,但现在客户端不接收广播到各自房间的消息 服务器代码: io.on('connection', client => { // JOIN GAME client.on('join-game', ({gameId, playerId}) => { console.log(gameId) client.join('new-ro

我正在构建一个应用程序,允许你加入游戏,然后从游戏中的其他玩家那里接收更新。在添加房间功能之前,套接字工作正常,但现在客户端不接收广播到各自房间的消息

服务器代码:

io.on('connection', client => {
      // JOIN GAME
      client.on('join-game', ({gameId, playerId}) => {
        console.log(gameId)
        client.join('new-room', () => {
          io.sockets.in('new-room').emit('player-joined-game', 'Is this thing on?);
        })
    });
客户端代码:

componentDidMount = () => {
  const socket = socketIOClient('localhost:5000');
  socket.on('player-joined-game', game => {
    console.log(game)
  })
}

服务器收到消息,但客户端没有打印“this this this on”(这东西开了吗?)

显然,您的客户端可能没有加入任何游戏,因为您的客户端没有发出“加入游戏”消息。 加上, 您的url字符串中缺少“http://”

您能否尝试在客户端执行以下操作:

componentDidMount=()=>{
const socket=socketIOClient('http://localhost:5000');
socket.on('player-joined-game',game=>{
控制台日志(游戏)
});
emit('join-game',{gameId:'game1',playerId:'player1'});
}

结果表明,这是因为每次我从客户端向服务器发送“join room”消息时,都会创建一个新的套接字实例。这意味着每次我加入一个房间,我都会给房间添加一个新插座。通过将我的客户机套接字声明移动到一个常量文件中,并在我的所有socketIO使用中使用该文件,解决了这个问题

嘿@dropyourcoffee,谢谢你的回复!正如我所说,当我不使用文件室时,客户端代码工作正常,所以我认为url不是问题所在。“加入游戏”消息由redux操作发出,并在服务器中正确接收。此处发出的消息
io.sockets.in('new-room').emit('player-joined-game','this this on?)。正常。可能原因是
js client.join('new-room',()=>{io.in('new-room').emit('player-joined-game','this this this on?);})而不是
js client.join('new-room',()=>{io.sockets.in('new room').emit('player-joined-game','this this this this this on?);})
在服务器端?是的,两种方法我都见过,两种都试过,但都不管用!我不是100%确定,因为我不知道您是如何实现redux操作的,但可能值得怀疑的是,组件是否在触发redux操作之前最初装载。我还尝试将
渲染中的所有代码移动到
中,但没有用:(