2012-08-14 8 views
7

Buscando en Meteor para crear una aplicación colaborativa de edición de documentos, porque es genial que Meteor sincronice datos entre múltiples clientes de forma predeterminada.Sincronización de estilo Etherpad en Meteor?

Pero cuando se utiliza un texto-zona, al igual que en el ejemplo de Sameer Kalburgi
http://www.skalb.com/2012/04/16/creating-a-document-sharing-site-with-meteor-js/
http://docshare-tutorial.meteor.com/
la experiencia es sub-óptimo.

Traté de escribir al mismo tiempo con un colega y mis cambios se sobrescribían cuando escribía y viceversa. Entonces, en la resolución de conflictos aún no existe un algoritmo de fusión, ¿no?

¿Está previsto esto para la función? ¿Hay formas de implementar esto actualmente? Etherpad parece manejar este problema bastante bien. Tener esto en Meteor haría que la creación de aplicaciones colaborativas de edición de documentos sea mucho más accesible.

Respuesta

0

Lo que describes parece fuera del alcance de Meteors para mí. ¡No es una herramienta para establecer posibilidades de colaboración!

Lo que proporciona es una forma de trabajar de forma transparente contra un subconjunto de una base de datos de servidores. Pero la implementación de la funcionalidad de fusión específica de casos de uso es el trabajo de la aplicación, no el marco.

+1

mi humilde opinión, el punto central de este tipo de aplicaciones no es sólo que los clientes sincronizar con el servidor de forma transparente, pero a través de esto, todos los usuarios conectados se sincronizan entre sí. Si eso no está configurado para las posibilidades de colaboración, ¡no sé qué es! –

+1

Y como la resolución de conflictos está integrada en Meteor, no parece una pregunta tan extraña preguntar si puede ser más sofisticada. Pero, por supuesto, si conoce una buena forma en que pueda engancharme al mecanismo de resolución de conflictos, me gustaría saberlo. –

+1

De acuerdo, mi redacción puede haber sido un poco desalentadora. Lo que quiero decir es que Meteor, por supuesto, admite escenarios de colaboración, pero no está explícitamente orientado hacia eso. Entonces debes esperar algunas asperezas aquí y allá. ¿A qué te refieres con "la resolución de conflictos está integrada"? Todo lo que pude encontrar en esa dirección en los documentos es que en los escenarios de conflicto siempre gana la primera suscripción del lado del cliente. –

8

Así que mirado en él un poco más, el algoritmo utilizado en Etherpad se conoce como transformación operativa:

La solución es transformación operativa (OT). Si no ha oído hablar de él, OT es una clase de algoritmos que realiza simultaneidad en tiempo real en varios sitios. OT es como git en tiempo real. Funciona con cualquier cantidad de retraso (de cero a vacaciones extendidas). Permite a los usuarios realizar ediciones simultáneas en vivo con un ancho de banda bajo. OT le brinda consistencia eventual entre múltiples usuarios sin reintentos, sin errores y sin sobrescribir ningún dato.

Desafortunadamente, la implementación OT es una mierda. Hay un millón de algoritmos con diferentes intercambios, en su mayoría atrapados en documentos académicos. Los algoritmos son realmente difíciles de implementar y ejecutan correctamente. Necesitamos algunas buenas bibliotecas, por lo que cualquier proyecto puede simplemente conectar OT si lo necesitan.

Eso es del sitio de sharejs. Un node.js basado en servidor-cliente que puede conectar a su cliente existente.

OT también se implementa en el motor de sincronización de modelos Racer para Node.js, que forma los fundamentos de Derby. Por el momento, no lo hace de forma transparente derby.js proporcionan todavía, pero planean también, desde el Derby docs:

Actualmente, corredor defecto en la aplicación de todas las transacciones en el orden recibido, es decir últimos, guionista y victorias. (...) Racer [también] es compatible con la resolución de conflictos a través de una combinación de memoria transaccional de software (STM), transformación operativa (OT) y técnicas de parche de coincidencia diferencial.

Estas características aún no se han implementado por completo, pero las demostraciones de Racer muestran ejemplos preliminares de STM y OT.

Coincidentemente, tanto los equipos de sharejs como de derbyjs tienen un ex Google-waver abordo. Meteor tiene un ex etherpad/Google Waver en su equipo central.Desde Etherpad es una de las implementaciones más conocidas de OT me estaba imaginando Meteor seguramente quieren apoyar en algún momento, así ...


4

He creado un paquete inteligente que integra Meteor ShareJS:

https://github.com/mizzao/meteor-sharejs

es muy preliminar en este momento, pero se puede importar en su aplicación, descenso de la textarea s, y que "simplemente funciona". Por favor probarlo y presentar algunas nuevas características a través de solicitudes de extracción :)

Echa un vistazo a una demo aquí:

http://documents.meteor.com

+0

El enlace a la demostración está muerto. – qznc