Socket.io - 分配套接字属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Socket.io - 分配套接字属性相关的知识,希望对你有一定的参考价值。

我正在开发一个聊天应用程序来学习Socket.io,我想在用户发出login事件时为用户分配用户名和颜色。然后我想用message事件发送这些属性。

io.on('connection', (socket) => {

  // Someone sent a message
  socket.on('message', (message) => {
    io.sockets.emit('message', {
      message,
      username: socket.username,
      color: socket.color,
    });
  });

  // Someone joined the chat
  socket.on('login', (data) => {
    socket.username = data.username;
    socket.color = data.color;
  });

});

如果我在socket.username事件结束时将login记录到控制台,则会正确记录。但是如果我尝试在message事件中记录它,那么它是未定义的,并且发出的数据只有message属性。

编辑:问题解决了。问题是我正在使用React并且正在进行不同的套接字连接......或类似的东西。我基本上在根React组件上设置了一个套接字,并将其作为props传递给其他组件。查看this的答案。

答案

您必须使用密钥来发送数据

socket.on('message', (message) => {
    io.sockets.emit('message', {
      message,
      username: socket.username,
      color: socket.color,
    });
});

应该

socket.on('message', (message) => {
  io.sockets.emit('message', {
     message: message,
     username: socket.username,
     color: socket.color,
  });
});

Read Socket.io Docs

以上是关于Socket.io - 分配套接字属性的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法读取未定义 socket.io.client 的属性“sid”

angular 4/socket.io 访问全局变量和函数调用

防止 socket.io 向套接字发送垃圾邮件

Socket.io 向套接字发送消息时出错

尝试在 React 中使用“Socket.io-client”模块会引发错误:无法分配给对象“#<Object>”的只读属性“exports”

socket.io - ReferenceError:未定义套接字