2011-06-03 9 views
6

¿Es esta una manera adecuada de almacenar mis datos de aplicación temporales?Socket.io y datos de sesión

socket.on('connection', function(client){ 
    client.myappsdata = { 
    a: true, 
    b: false 
    } 
} 

Respuesta

9

Prefiero algo un poco más pesado.

pseudo-código:

// ClientManager.js 
var Manager = new function() { 
    this._clients = []; 

    this.set = function(client, data) { 
     this._clients[client.sessionId] = data;  
    }; 

    this.get = function(client) { 
     return this._clients[client.sessionId];    
    } 

}; 

module.exports = function() { 
    return Object.create(Manager); 
}; 

// main.js 
var manager = require("ClientManager")(); 

/* ... */ 

socket.on("connection", function(client) { 
    manager.set(client, { 
     /* ... */ 
    }); 
} 

Bassically cada cliente tiene una sessionId por lo almacenan sus datos en un resumen con clave por que sessionId

+0

algún motivo para no hacerlo cómo lo estoy haciendo? – Thomas

+0

@Thomas el método anterior es más extensible. También tendría que buscar todo el código socket.io para asegurarme de que el objeto 'client' se pasa por todos lados. Lo que sí sé es que 'sessionId' es seguro para usar una clave/hash para adjuntar a un cliente. Así que guarde los datos en un hash codificado por la sessionId – Raynos

+0

@Raynos con su solución, también debe pasar al cliente a todas partes, porque ambos métodos get y set tienen el objeto del cliente como primer parámetro, ¿no es así? Es decir, IMO, normal y no evitable, porque tenemos que obtener una referencia del cliente para obtener sus datos. – Qlimax

Cuestiones relacionadas