首页 > 解决方案 > 套接字 io on 方法未执行

问题描述

我正在使用带有套接字 io 的本机反应,并且我试图弄清楚为什么套接字 io.on没有执行。有人会有想法吗?

例如客户端套接字 io,console.log 不会被调用,

  socket.on('streamStarted', () => console.log('success'));

但是 io.connection 被调用,因为我可以看到 console.log('user connected to main connection')日志。我可能做错了什么?

服务器端

io.on('connection', socket => {
  console.log('user connected to main connection');
  socket.on('streamStarted', () => {
    console.log('user connected to stream');
    peerConnections.set(socket.id, socket);
  });
  socket.on('offerOrAnswer', data => {
    console.log(data);
    socket.emit('offerOrAnswer', data);
  });

  socket.on('disconnect', () => {
    console.log('disconnected');
    peerConnections.delete(socket.id);
  });
});

反应本机客户端

const socket = io('http://bf1f2213f095.ngrok.io');
React.useEffect(() => {
    socket.on('streamStarted', () => console.log('success'));
    socket.on('offerOrAnswer', sdp => {
      console.log('check for offer', sdp);
      // set sdp as remote description
      setOffer(sdp);
      pc.setRemoteDescription(new RTCSessionDescription(sdp));
    });
    socket.on('candidate', candidate => {
      pc.addIceCandidate(new RTCIceCandidate(candidate));
    });

    startStream();
}, []);

标签: reactjsreact-nativesocket.io

解决方案


为了让您socket.on('streamStarted', () => console.log('success'));被触发 - 您必须在某处发出此消息:

React.useEffect(() => {
    socket.emit('streamStarted', {foo: 'bar'});
}, []);

推荐阅读