Socket.io - 分配套接字属性

时间:2017-12-18 00:08:33

标签: javascript websocket 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回答。

1 个答案:

答案 0 :(得分:1)

您必须使用密钥发送数据

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