从 Socket.IO-客户端访问 Socket.IO-服务器的数据对象

Accessing The Data Object of Socket.IO-Server From The Socket.IO-Client

在 socket.io 服务器中,可以将 属性 添加到 socket.data 对象。我如何在客户端访问这样的 属性 (socket.io-client)?

// 服务器代码

io.on('connection', socket => {
   socket.data.customId = getCustomId();
   io.emit('connected', {success: 'true'})
})

// 客户端代码

socket = io('http://localhost:5000');

socket.on('connected', data => {
  console.log('SOCKET_DATA:', socket)
  console.log('SOCKET_CUSTOM-ID:', socket.data.customId); // produces 'undefined'
})

我想从客户端访问我在服务器上添加的 customIddata 属性甚至不存在于客户端控制台上显示的 socket 对象上。

如有任何帮助,我们将不胜感激

如果您想通过某种方式访问​​它,则必须创建一些发送到服务器的请求。只有服务器存储该信息。您可以在客户端执行类似以下操作:

socket.emit("getCustomId", (id) => {
   console.log("SOCKET_CUSTOM-ID:", id);
});

然后服务器可以使用自定义 id 进行侦听和响应:

socket.on("getCustomId", (callback) => {
    callback(socket.data.customId);
});

服务器端的 callback 参数连接回 socket.emit("getCustomId"); 调用中声明的未命名 ES-6 函数,您可以在这个关于 [的 SO 问题上看到 here =14=] 回调