如何在 socket.io 1.0 中存储客户端相关数据
How to store client associated data in socket.io 1.0
文档说 socket.io 现在不支持 .get .set
是否可以像
那样存储与客户相关的数据
io.sockets.on('connection', function (client) {
client.on('data', function (somedata) {
client['data'] = somedata;
});
});
如果我需要多个节点?
是的,给socket.iosocket
对象添加属性是可以的。您应该注意不要使用可能与内置属性或方法冲突的名称(我建议添加前导下划线或使用某种名称前缀对它们进行命名)。但是套接字只是一个 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];
});
});
是的,只要没有其他同名的内置属性,这是可能的。
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;
});
});
我会建议另一种方式,但使用 ECMAScript 6 weak maps
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);
});
});
文档说 socket.io 现在不支持 .get .set
是否可以像
那样存储与客户相关的数据io.sockets.on('connection', function (client) {
client.on('data', function (somedata) {
client['data'] = somedata;
});
});
如果我需要多个节点?
是的,给socket.iosocket
对象添加属性是可以的。您应该注意不要使用可能与内置属性或方法冲突的名称(我建议添加前导下划线或使用某种名称前缀对它们进行命名)。但是套接字只是一个 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];
});
});
是的,只要没有其他同名的内置属性,这是可能的。
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;
});
});
我会建议另一种方式,但使用 ECMAScript 6 weak maps
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);
});
});