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,
});
});
以上是关于Socket.io - 分配套接字属性的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的类型错误:无法读取未定义 socket.io.client 的属性“sid”
angular 4/socket.io 访问全局变量和函数调用
尝试在 React 中使用“Socket.io-client”模块会引发错误:无法分配给对象“#<Object>”的只读属性“exports”