【问题标题】:Can't receive payload from emited event - Socket.io无法从发出的事件接收有效负载 - Socket.io
【发布时间】:2021-02-14 05:24:39
【问题描述】:

我有一个带有身份验证服务器的套接字,如下所示:

const io = require('socket.io').listen(3002);
const jwt = require('jsonwebtoken');

io.use((socket, next) => {
  if (socket.handshake.query && socket.handshake.query.token) {
    jwt.verify(
      socket.handshake.query.token,
      '4-8-15-16-23-42',
      (err, decoded) => {
        if (err) return next(new Error('Authentication error'));
        socket.decoded = decoded;
        next();
      }
    );
  } else {
    next(new Error('Authentication error'));
  }
}).on('connection', socket => {
  socket.emit('connect', 'socket server is connected'); //sending message

  socket.on('recieved', socket => {
    console.log(socket);
  });
});

而客户端是这样的:

  ...
  useEffect(() => {
    const token = sessionStorage.getItem('token');
    const socket = io('http://localhost:3002', {
      query: { token }
    });

    socket.on('connect', msg => {
      console.log(msg); //undefined
    });
  }, []);
  ...

问题是连接已经完成,但是之后当我想从我的服务器发出另一个带有一些有效负载的事件时,我无法通过收听它来接收另一端的有效负载。

【问题讨论】:

  • 您是否尝试将“套接字”作为依赖项传递给 useEffect 依赖项数组?
  • @BrijeshPrasad 是的,我试过了。

标签: javascript node.js reactjs events socket.io


【解决方案1】:

问题是你发出的“连接”事件是一个已经“保留”的事件,当套接字连接成功时,它会从套接字服务器发送。

只需进行以下更改

在双方(客户端和服务器)将事件 e.x 从“connect”重命名为“connected” “服务器”代码

 socket.emit('connected', 'socket server is connected');

在“客户端”上

socket.on('connected', msg => {
  console.log(msg); //msg will no longer be "undefined"
});

你会没事的

【讨论】:

  • 发现问题在于“连接”被保留了,真是令人沮丧:D。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多