2011-07-11 16 views
23

Acabo de entrar en backbone.js y estoy encontrando un progreso un poco lento. Mi principal problema es encontrar la manera de mantener sincronizados los modelos de mi cliente y servidor utilizando socket-io (técnicamente estoy usando now.js, pero debería aplicarse el mismo principio).Cómo usar backbone.js con websockets/socket-io/nowjs

Creo que la mejor manera es anular el método de sincronización, pero algunos consejos simples sería realmente bienvenida.

Respuesta

27

Simplemente sobrescribe Backbone.sync para que envíe mensajes a socket.io y le dice a los modelos backbonejs relevantes en el servidor que cambien el estado.

La parte interesante de esta solución es la configuración de la relación maestro-maestro. Debe asegurarse de que para cualquier cliente solo puedan "actualizar" el estado de los modelos en el servidor que tienen "propiedad" para evitar piratas informáticos y la corrupción del estado del servidor.

Así, por cada cliente que tienen un conjunto M Cuando el cliente es el maestro de todos los modelos de M y tiene un conjunto S, donde dicho cliente tiene esclavos de todos los modelos en S.

Sólo puede forzar la actualización en el servidor de modelos en M y solo un cliente debe tener un modelo particular en M (o debe implementar una implementación sólida de bloqueo/fusión).

Cuando se actualiza un modelo en el servidor, simplemente se envía a cualquier cliente que tenga ese modelo en S. (y se envía a cualquier cliente que tenga ese modelo en M si el modelo está en M para clientes múltiples).

Se debe pensar mucho en control/permisos y propiedad que normalmente maneja el controlador MVC una vez que un cliente POST/PUT/DELETE algunos datos.

8

Un enfoque mucho mejor es la arquitectura basada en eventos utilizando un agregador de eventos. Buen material de lectura sobre el tema es el artículo siguiente de Derick Bailey =>Decoupling Backbone Apps From WebSockets

Se guarda la materia altamente desacoplado, permite la prueba más fácil y cambiantes websockets lib, y encima de todo, no se anda con anulando partes internas del Backbone como sync()

+0

Su enlace simplemente señala esta página. – phylae

Cuestiones relacionadas