web-dev-qa-db-fra.com

Comment stocker les données associées au client dans socket.io 1.0

Les documents indiquent que socket.io ne prend pas en charge .get .set maintenant

Est-il correct de stocker des données associées au client comme

io.sockets.on('connection', function (client) {
    client.on('data', function (somedata) {            
        client['data'] = somedata;
    });    
});

au cas où j'aurais besoin de plusieurs nœuds?

16
Herokiller

Oui, il est correct d'ajouter des propriétés à l'objet socket.io socket. Vous devez faire attention à ne pas utiliser de noms qui pourraient entrer en conflit avec les propriétés ou méthodes intégrées (je suggère d'ajouter un trait de soulignement ou de les nommer avec une sorte de préfixe de nom). Mais une socket est juste un objet Javascript et vous êtes libre d'y ajouter des propriétés tant que vous ne causez aucun conflit avec les propriétés existantes.

Il existe d'autres façons de faire cela qui utilisent le socket.id comme clé dans votre propre structure de données.

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];
    });
});
24
jfriend00

Oui, c'est possible tant qu'il n'y a pas d'autres propriétés intégrées du même nom.

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;
    });    
});

Je suggérerais une autre façon, mais avec ECMAScript 6 cartes faibles

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);
    });   
});
13
code-jaff