2011-06-03 29 views
6

Bu, geçici uygulama verilerimi depolamak için uygun bir yol mu?Socket.io ve oturum verileri

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

cevap

9

Biraz daha ağır bir şey tercih ederim.

Sözde Kod:

// 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 her istemci bir sessionId böylece sessionid

+0

Yapıyorum nasıl yapılacağını değil bir neden var anahtarlı bir karma kendi veri deposu var? – Thomas

+0

@ Yukarıdaki yöntem daha genişletilebilir. Ayrıca 'client' nesnesinin her yere geçtiğinden emin olmak için socket.io kodunun tamamını avlamak zorunda kalacağım. Bildiğim şey, 'sessionId' 'in bir istemciye eklenecek bir anahtar/karma kullanmak için güvenli olmasıdır. Bu nedenle, verileri – Raynos

+0

@Raynos tarafından anahtar kelimeyle kaydedilen bir karede saklayın, çözümünüzü her iki tarafa da iletmelisiniz, çünkü hem alma hem de ayarlama yöntemleri istemci nesnesine ilk parametre olarak sahip değil, değil mi? Yani, IMO, normal ve önlenemez, çünkü müşterinin verilerini almak için bir referans almamız gerekiyor. – Qlimax