2012-04-28 11 views
18

Ich möchte nur einige Variablen an meine Sockets anhängen, aber ich verstehe die .get und .set-Methoden nicht. Sie haben beide ein drittes Argument für einen Rückruf. Kann das weggelassen werden? Wofür ist das?! Ist der Callback selbst intherit Argumente?socket.io socket.set und socket.get - für was ist das Callback-Argument?

Meine beste Vermutung ist, dass es da ist, wenn socket.io nicht Speicher verwendet, sondern speichert dieses Zeug woanders und benötigt eine Fehlerprüfung Callback.

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

Ich verwende Socket.io 0.9.x

Die Funktion in socket.js definiert ist

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

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

Antwort

12

setget und asynchron sind. Der Rückruf wird aufgerufen, wenn diese Vorgänge abgeschlossen sind. Sie können es weglassen, oder Sie können es für jeden Zweck verwenden, den Sie mögen, nicht nur Fehlerbehandlung.

+0

Dank example code from the official repo. gesehen, die Tatsache, dass sie asynchron sind macht es leichter zu wickeln meine Kopf um die ganze Sache herum. In den meisten Fällen würde dies verwendet werden, um Werte irgendwo in einer Datenbank zu speichern und dann eine andere zurück zum Client zu senden, um sie wissen zu lassen, dass sie gespeichert ist? Ich denke, es ist mir immer noch nicht klar, abgesehen von Namespace-Kollisionen, warum wir nicht einfach so etwas wie 'socket.property = value;' verwenden konnten. Vor 2 Tagen mit node.js gestartet, bitte vergib mir meine Ignoranz! –

+2

Ja, ein guter Grund, warum Sie 'set',' get' verwenden (wie man einfach einen Wert in einem Objekt speichert), ist es in der db zu speichern. In der Tat scheint 'socket.io' bereits einen Build in' redisis store' zu ​​haben, aber ich bin kein socket.io-Benutzer, daher kann ich nicht wirklich sagen, wie das verwendet werden kann. Wenn Sie sich den Quelltext anschauen, wird beim Aufruf von 'set' der Wert in den' store' geschrieben: https://github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L246 – mihai

+0

und das .store standardmäßig ist redis? Oder ist es einfach so, dass Sie Ihren eigenen Laden einrichten können? – Funkodebat

32

Die Funktionen get und set funktionieren auf dem Socket-Objekt were removed in version 1.x. Der richtige Weg, Werte nun zu speichern und abzurufen ist durch Eigenschaften auf dem Socket-Objekt, etwa so:

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

Wie auf dem

+0

Wo wird das gespeichert? Wird dies dem Client zugestellt oder nur serverseitig gespeichert? – C4u

Verwandte Themen