【问题标题】:Accessing the Data Object of Socket.IO-Server from the Socket.IO-Client从 Socket.IO-Client 访问 Socket.IO-Server 的数据对象
【发布时间】:2022-01-11 06:32:57
【问题描述】:

在 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'
})

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

任何帮助将不胜感激

【问题讨论】:

  • 你添加到socket对象的属性只存在于服务器端

标签: node.js websocket socket.io


【解决方案1】:

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

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 函数,您可以在关于socket.io 回调的这个SO 问题上看到here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2013-05-21
    • 2015-04-03
    • 1970-01-01
    相关资源
    最近更新 更多