如何将客户端关联的数据存储在socket.io 1.0中
文档说socket.io现在不支持.get .set
是否可以存储客户端关联的数据
io.sockets.on('connection', function (client) { client.on('data', function (somedata) { client['data'] = somedata; }); });
万一我需要多个节点?
是的,可以将属性添加到socket.io socket
对象。 你应该小心,不要使用可能与内置属性或方法冲突的名称(我build议添加一个前导下划线或用某种名称前缀来命名它们)。 但是套接字只是一个Javascript对象,只要不与现有属性发生冲突,您就可以自由地向其添加属性。
还有其他的方法可以使用socket.id
作为你自己的数据结构的一个关键。
var currentConnections = {}; io.sockets.on('connection', function (client) { currentConnections[client.id] = {socket: client}; client.on('data', function (somedata) { currentConnections[client.id].data = someData; }); client.on('disconnect', function() { delete currentConnections[client.id]; }); });
是的,只要没有其他同名的内build属性就可以。
io.sockets.on('connection', function (client) { client.on('data', function (somedata) { // if not client['data'] you might need to have a check here like this client['data'] = somedata; }); });
我build议另一种方式,但ECMAScript 6 弱地图
var wm = new WeakMap(); io.sockets.on('connection', function (client) { client.on('data', function (somedata) { wm.set(client, somedata); // if you want to get the data // wm.get(client); }); client.on('disconnect', function() { wm.delete(client); }); });
- String.toLocaleUpperCase():在Node.js上设置语言环境
- 正确查询基于查找所有对象有很多关系
- Android的APK构build失败“多个文件被发现与操作系统无关的path'lib / arm64-v8a / libc ++ _ shared.so'”
- 为什么我可以使用绝对path而不是相对的方式将带有Formidable的file upload到文件夹?
- 仅使用节点二进制运行的nodejs程序
- 如何redirect到另一个页面并打印警报?
- Node.js TCP客户端的行为与Netcat / Telnet不同
- npm start不适用于Gulp js上的React应用程序
- NextTick()不工作