2011-07-11 9 views
23

Po prostu dostaję się do backbone.js i znajduję postęp nieco powolny. Moim głównym problemem jest opracowanie sposobu synchronizowania moich modeli po stronie klienta i serwera przy użyciu socket-io (technicznie używam now.js, ale ta sama aplikacja powinna obowiązywać).Jak korzystać z backbone.js z websockets/socket-io/nowjs

Myślę, że najlepszym sposobem jest nadpisanie metody synchronizacji, ale kilka prostych rad byłoby naprawdę mile widziane.

Odpowiedz

27

Należy po prostu zastąpić Backbone.sync, tak aby wysyłał komunikaty w dół socket.io i informował odpowiednie modele backbonejs na serwerze o zmianie stanu.

Interesującą częścią tego rozwiązania jest ustanowienie relacji master-master. Musisz zagwarantować, że dla każdego klienta mogą jedynie "zaktualizować" stan modeli na serwerze, że mają "własność", aby uniknąć hakerów i korupcji po stronie serwera.

Więc dla każdego klienta mają ustawioną M jeżeli klient jest panem wszystkich modeli M i posiada zestaw S jeżeli klient ma niewolników wszystkich modeli S.

może tylko wymusić aktualizację na serwerze modeli w M i tylko jeden klient powinien mieć określony model w M (lub trzeba wdrożyć solidną implementację blokowania/łączenia).

Ilekroć model na serwerze jest aktualizowany, po prostu wypycha się do dowolnego klienta, który ma ten model w S. (i naciśnij do dowolnego klienta, który ma ten model w M, jeśli model jest w M dla wielu klientów).

Wiele myśli musi przejść do kontroli/uprawnień i własności, które są zwykle obsługiwane przez kontroler MVC, gdy klient POST/PUT/DELETE niektóre dane.

8

Znacznie lepszym podejściem jest architektura sterowana zdarzeniami za pomocą agregatora zdarzeń. Świetna lektura na ten temat to następujący artykuł Derick Bailey'a:>Decoupling Backbone Apps From WebSockets

Utrzymuje elementy wysoce odsprzężone, umożliwia łatwiejsze testowanie i zmienianie lib sieci web, a na dodatek wszystko nie zepsuć z pominięciem wewnętrznych elementów szkieletu, takich jak sync()

+0

Twój link wskazuje tylko tę stronę. – phylae