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



这是我的服务器端代码

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属性在客户端和服务器对象上是相同的,只是因为套接字。IO库将id作为连接过程和客户端套接字的一部分从服务器发送到客户端。IO库在客户端大小的套接字对象上初始化该属性。

如果你想在两个对象上都有属性,那么你必须从客户端向服务器或服务器向客户端发送一个带有该属性值的消息,然后让另一端在其套接字对象上设置该属性。这不是什么插座。IO自动为你服务


重复,当你这样做时在服务器端:

socket.username = 'john';

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

您使用如下命令向套接字的另一端发送数据:

socket.emit("yourMessageName", yourData);