2012-04-28 7 views
18

Voglio solo collegare alcune variabili ai miei socket, ma non capisco i metodi .get e .set. Entrambi hanno un terzo argomento per una richiamata. Questo può essere omesso? Cosa serve?! La callback stessa è argomento di argomento?socket.io socket.set e socket.get: a cosa serve l'argomento del callback?

La mia ipotesi migliore è che sia lì per quando socket.io non sta usando l'archivio di memoria ma sta salvando questa roba da qualche altra parte e ha bisogno di un errore durante la verifica della richiamata.

socket.on('set nickname', function (name) { 
    socket.set('nickname', name, function (arguments) { 
     doSomethingMysterious(); 
    }); 

sto usando socket.io 0.9.x

La funzione è definita in socket.js

/** 
* Stores data for the client. 
* 
* @api public 
*/ 

Socket.prototype.set = function (key, value, fn) { 
    this.store.set(key, value, fn); 
    return this; 
}; 

risposta

12

set e get sono asincroni. Il callback sarà chiamato quando queste operazioni saranno completate. Puoi ometterlo o puoi usarlo per qualsiasi scopo tu voglia, non solo per la gestione degli errori.

+0

Grazie, il fatto che sono asincrono rende più facile da avvolgere la mia gira intorno al tutto. In casi comuni questo dovrebbe essere usato per salvare valori in un db da qualche parte e quindi usare un altro emit di nuovo al client per fargli sapere che è stato salvato? Suppongo che non sia ancora chiaro per me, oltre alla collisione nello spazio dei nomi, perché non potremmo usare solo qualcosa come "socket.property = value;" Appena iniziato con node.js 2 giorni fa, ti prego perdona la mia ignoranza! –

+2

Sì, una buona ragione per cui dovresti usare 'set',' get' (come opzionato per il solo salvataggio di un valore in un oggetto), è quello di salvarlo nel db. Infatti 'socket.io' sembra avere già una build in' redis store', ma non sono un utente di socket.io quindi non posso davvero dire come possa essere usato. Se si guarda il codice sorgente, quando si chiama 'set' questo inserisce il valore in' store': https://github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L246 – mihai

+0

e quello .store di default è redis? O è come se fosse sul posto giusto per poter creare il tuo negozio? – Funkodebat

32

Le funzioni get e set sull'oggetto socket were removed in version 1.x. Il modo corretto per memorizzare e recuperare i valori ora è attraverso le proprietà sull'oggetto socket, in questo modo:

socket.on('set nickname', function (name) { 
    socket.nickname = name; 
}); 

Come visto sulla example code from the official repo.

+0

Dove verrà memorizzato? Sarà consegnato al cliente o archiviato solo lato server? – C4u