尽管在套接字上声明了变量,但仍未定义

getting undefined although variable is declared on socket

这是我的服务器端代码

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

这是我的客户端

socket.on("connect", () => {  console.log(socket.username); });

但我不确定。我也试过了

socket.on("connect", () => {  console.log(username); }); 

但没用,但是这里有效:

socket.on("connect", () => {  console.log(socket.id); });

这是为什么?

您分配给服务器上套接字对象的属性不会发送到客户端套接字对象 - 它们对于服务器对象是唯一的。

同样,如果您在客户端套接字对象上设置了一个属性,它不会出现在服务器套接字对象上。

这些是存在于不同计算机上不同进程中的不同对象。 socket.id 属性 仅在客户端和服务器对象上相同,因为 socket.io 库将 id 从服务器发送到客户端作为连接过程的一部分,而客户端 socket.io 库在客户端大小的套接字对象上初始化 属性。

如果您希望属性同时出现在两个对象上,那么您必须使用 属性 的值从客户端向服务器或服务器向客户端发送一条消息,然后让另一端设置属性 在其套接字对象上。这不是 socket.io 自动神奇地为您做的事情。


重复一遍,当您在服务器端执行此操作时:

socket.username = 'john';

这根本不会影响客户端套接字对象。客户端和服务器套接字对象是完全不同的对象 运行,在不同的进程中,通常在通过网络通信的不同计算机上。它们不会自动共享任何属性,除了 socket.io 库有意初始化为在每个属性中都相同的一些属性,例如 socket.id 属性.

你使用这样的方式将数据发送到套接字的另一端:

socket.emit("yourMessageName", yourData);