2012-04-28 8 views
18

Chcę tylko dołączyć niektóre zmienne do moich gniazd, ale nie rozumiem metod .get i .set. Obaj mają trzeci argument na wywołanie zwrotne. Czy można to pominąć? Po co to jest?! Czy samo wywołanie zwrotne zawiera argumenty?socket.io socket.set i socket.get - dla czego służy argument callback?

Przypuszczam, że jest tam, gdy socket.io nie używa magazynu pamięci, ale zapisuje te rzeczy gdzie indziej i wymaga sprawdzenia błędu oddzwaniania.

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

Używam socket.io 0.9.x

Funkcja jest zdefiniowana w socket.js

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

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

Odpowiedz

12

set i get są asynchroniczne. Callback zostanie wywołany po zakończeniu tych operacji. Możesz go pominąć lub użyć go do dowolnego celu, nie tylko do obsługi błędów.

+0

Dzięki, fakt, że są one asynchroniczny ułatwia owinąć obejrzyj całą sprawę. W typowych przypadkach byłoby to używane do zapisania wartości do db gdzieś, a następnie użyć innego emitować z powrotem do klienta, aby poinformować go, że jest zapisany? Sądzę, że nadal nie jest dla mnie jasne, inne niż kolizja nazw, dlaczego nie możemy po prostu użyć czegoś takiego jak 'socket.property = value;' Po prostu zaczęło się od node.js 2 dni temu, proszę wybaczyć moją ignorancję! –

+2

Tak, dobrym powodem, dla którego użyłbyś 'set',' get' (w przeciwieństwie do zapisania wartości w obiekcie), jest zapisanie jej w db. W rzeczywistości 'socket.io' wydaje się mieć już kompilację' 'redis store', ale nie jestem użytkownikiem socket.io, więc nie mogę powiedzieć, w jaki sposób można to wykorzystać. Jeśli spojrzysz na kod źródłowy, wywołanie 'set' spowoduje umieszczenie wartości w' store': https://github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L246 – mihai

+0

i że .store domyślnie jest redis? Czy jest to jak na miejscu, abyś mógł założyć własny sklep? – Funkodebat

32

Funkcje get i set na obiekcie gniazda were removed in version 1.x. Właściwym sposobem na przechowywanie i pobieranie wartości teraz jest przez właściwości dotyczących obiektu gniazda, tak jak poniżej:

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

Jak widać na example code from the official repo.

+0

Gdzie to będzie przechowywane? Czy zostanie dostarczona do klienta lub przechowywana tylko po stronie serwera? – C4u