Pregunta

Estoy buscando una biblioteca que me permitiera sincronizar texto en tiempo real entre varios usuarios (al estilo de Google Docs).

He topé transformación operativa, que parece encajar mis necesidades. Dicho esto, entiendo la esencia de OT, pero no las matemáticas ni la aplicación de OT.

Por lo tanto, me preguntaba si había una biblioteca de Javascript de arrastrar y soltar que enganchar en un área de texto, generar las transformaciones, entonces me permitirá aplicar esas transformaciones a otro cliente?

(He conseguido la fuente Etherpad, pero no puedo ni pies ni cabeza fuera de él. Si alguien puede señalar cómo aprovechar la implementación de OT Etherpad, que va a ser grande también!)

¿Fue útil?

Solución

Creo que parte de la implementación del AT de Google Wave son de código abierto (y más partes están llegando).

No estoy seguro de si esto es lo que busca, sino una alternativa a OT es diferencial sincronización :

Otros consejos

Uno de los ingenieros ex-Wave ha lanzado una aplicación CoffeeScript de su algoritmo de edición colaborativa llamados ShareJS, ahora llamado ShareDB .

voy a resumir las soluciones que he encontrado.

  • Transformación operacional:. Por ejemplo

    • Google Wave OT. El enfoque se basa en el llamado enfoque de Júpiter.
    • ShareJs. Basado en el mismo algoritmo de AT como Google Wave OT.
    • COWEB-sebasrijf. Sobre la base de COT -. Un enfoque OT muy sofisticado, que también apoya el mensaje p2p propagación
    • OpenCoweb. Aprovecha OpenCoweb-sebasrijf con el fin de proporcionar un marco de pleno derecho de una gran cantidad de problemas similares.
    • OT.js se basa en la operación de tipos de ShareJs.
    • DriveSDK. Una API muy interesante que puede hacer un montón de cosas - por ejemplo, colaboración en los gráficos.
    • SwellRT es un Tenedor de Apache Wave. Es es federados, y soporta texto enriquecido.
  • Sincronización diferencial:

    • Diff-Match-Patch de Neil Fraser.
    • MobWrite aprovecha el algoritmo de Diff-Match-Patch.
  • CRDT (conmutativa Tipo de datos duplicados):

    • Hay un montón de diferentes algoritmos CRDT que permiten la aplicación de tipos compartidos. Algunos Crdts trabajan con la propagación de mensajes P2P, otros se basan en modelos cliente-servidor
    • YJS le permite compartir los tipos de datos arbitrarios (texto enriquecido, Array, Hash Mapas, .. extensible). apoyo sin conexión y soporte para los protocolos de comunicación P2P (hay módulos para XMPP, websockets, y WebRTC)
    • SwarmJS servidor de cliente de base de datos compartida con el apoyo fuera de línea. Funciona bien con Reaccionar
    • Woot Una implementación del Woot CRDT
    • CRDT Otra aplicación CRDT
    • AutoMerge

OT Bibliotecas:

Dentro del proyecto WebSocket HWIOS, he utilizado con éxito una combinación de ambos (PY-Infinote en el serverside, jinfinote en clientside) para sincronizar señala el documento.

La biblioteca ot.js https://github.com/Operational-Transformation/ot.js pueden ser útiles para escenarios multiusuario.

llave en mano, o soluciones de "arrastrar y soltar" para este problema en realidad no han existido debido a la complejidad del estado mutable fiable de sincronización compartida. La respuesta de dmonad es un resumen decente, y he publicado una visión general más arriba-hasta la fecha de las soluciones disponibles aquí .

Esta pregunta es bastante antiguo, pero Convergencia (exención de responsabilidad: yo soy uno de los fundadores) ofrece la solución más llave en mano por ahí , proporcionando no sólo la sincronización de datos, pero una serie de otras APIs útiles para la construcción de un UX colaboración. Aquí está un ejemplo muestra exactamente lo que solicitó: la sincronización de un campo de texto a través de múltiples clientes.

De lo contrario, ShareDB es una gran solución de código abierto que se adapta a una gran cantidad de necesidades de las personas.

También puedes ver estas bibliotecas javascript:

Con un lib cliente js (Strophe.js) se puede utilizar un servidor XMPP libre (como jabber.org) junto con mi lado del cliente OT lib (JSOTTEST) para construir un sistema completo cliente-servidor.

Voy a enviar el src de un sistema de chat cliente-servidor de demostración cuando tengo tiempo para revisar el código.

Npm tiene algunas bibliotecas ot agradables para Node.js:

  • https://npmjs.org/package/ot - adaptadores para CodeMirror y el as construida en así como una aplicación cliente y el servidor
  • https://npmjs.org/package/changesets - biblioteca ot llanura utilizable en nodo y el navegador; le permite construir conjuntos de cambios '' (esencialmente Diffs) que puede enviar su alrededor, transformar el uno contra el otro y se aplican en un documento

Se podría hablar con los chicos en Cedanet . Aunque Ceda es de código cerrado y no hay prueba gratuita está disponible en su sitio web. He estado involucrado en el desarrollo de Ceda y seguir trabajando con él en proyectos comerciales, por lo que podría ser capaz de proporcionar alguna información / asesoramiento si se dirige por este camino.

Lo etherpad.org lite Etherpad es superior a otras soluciones.

Estamos construyendo un editor de colaborar que combina transformación operativa con el control de versiones. De esa manera podemos apoyar tanto, fuera de línea y en línea collab. Damos a conocer nuestra propia biblioteca OT ayer como parte de nuestra pila de código abierto.

http://interior.substance.io/modules/operator.html

También hemos contribuido con una biblioteca de control de versiones.

http://interior.substance.io/modules/chronicle.html

He escrito un pequeño unixy (hacer una cosa y hacerlo bien) biblioteca que implementa una capa de control de OT, lo que le permite conectar diferentes tipos de OT (soporta todos los tipos shareJS compatibles). Es similar a shareJS pero menos dogmática y más abstracto.

https://github.com/marcelklehr/gulf

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top