如何从Socket.IO客户端访问服务端设置的socket.data对象属性
Socket.IO 客户端获取服务端
socket.data自定义属性的实现方法 Socket.IO 服务端的 socket.data 是仅存储在服务端内存的上下文对象,默认不会自动同步到客户端,因此你直接在客户端访问 socket.data 会得到 undefined。
你可以通过「服务端主动下发自定义属性 + 客户端本地存储」的方式实现需求,具体修改如下:
修改后的服务端代码
io.on('connection', socket => { socket.data.customId = getCustomId(); // 仅给当前连接的客户端发送事件,携带customId参数 // 注意不要用io.emit,该方法会广播给所有已连接客户端,可能导致数据泄露 socket.emit('connected', { success: 'true', customId: socket.data.customId }) })
修改后的客户端代码
socket = io('http://localhost:5000'); socket.on('connected', data => { // 初始化客户端socket的data属性,存储服务端下发的自定义值 socket.data = socket.data || {}; socket.data.customId = data.customId; console.log('SOCKET_CUSTOM-ID:', socket.data.customId); // 可正常输出对应值 })
拓展说明
如果需要同步多个服务端socket.data的自定义属性,可以单独封装一个同步事件,服务端每次更新socket.data时主动触发该事件,把需要同步的属性传给客户端,客户端收到后统一更新本地的socket.data即可。
注意:服务端和客户端的socket.data是完全独立的两个对象,两端的修改默认不会双向同步,所有需要跨端共享的属性都需要手动通过事件传输。
内容的提问来源于stack exchange,提问作者Eddy Freeman
相关产品推荐
相关产品推荐

