Как хранить связанные с клиентом данные в socket.io 1.0
Документы говорят, что socket.io сейчас не поддерживает.get .set
Это нормально для хранения данных, связанных с клиентом, как
io.sockets.on('connection', function (client) {
client.on('data', function (somedata) {
client['data'] = somedata;
});
});
в случае, если мне нужно несколько узлов?
2 ответа
Да, это нормально, чтобы добавить свойства в socket.io socket
объект. Вы должны быть осторожны, чтобы не использовать имена, которые могут конфликтовать со встроенными свойствами или методами (я бы предложил добавить начальное подчеркивание или область имен с некоторым префиксом имени). Но сокет - это просто объект 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 слабых карт
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);
});
});