尽管在套接字上声明了变量,但仍未定义
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);
这是我的服务器端代码
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);