¿Biblioteca de Transformación Operativa?


Estoy buscando una biblioteca que me permita sincronizar texto en tiempo real entre múltiples usuarios (ala Google Docs).

Me he topado con la Transformación Operativa, que parece ajustarse a mis necesidades. Dicho esto, entiendo la esencia de OT, pero no las matemáticas ni la implementación de OT.

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

(He obtenido la fuente de Etherpad, pero no puedo hacer cara o cruz de ella. Si alguien pudiera señalar cómo aprovechar la implementación de OT de Etherpad, ¡eso también sería genial!)

Author: dreeves, 2010-01-11

14 answers

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

No estoy seguro de si esto es lo que está buscando, pero una alternativa a OT es Sincronización diferencial :

 54
Author: Jörg W Mittag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-30 16:09:39

Uno de los ex ingenieros de Wave ha lanzado una implementación de Coffeescript de su algoritmo de edición colaborativa llamado ShareJS, ahora llamado ShareDB.

 41
Author: hawkeye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-30 21:32:05

Resumiré las soluciones que encontré.

  • Transformación operativa: P. ej.

    • Google Wave OT. El enfoque se basa en el llamado enfoque de Júpiter.
    • ShareJs. Basado en el mismo algoritmo de OT que Google Wave OT.
    • Coweb-jsoe. Basado en COT - un enfoque OT muy sofisticado que también admite la propagación de mensajes p2p.
    • OpenCoweb. Aprovecha OpenCoweb-jsoe para proporcionar un marco completo para muchos problemas similares.
    • OT.js se basa en los tipos de operación de ShareJs.
    • DriveSDK. Una API muy interesante que puede hacer muchas cosas, por ejemplo, colaboración en gráficos.
    • SwellRT es una Bifurcación de Apache Wave. Is está federado y admite texto enriquecido.
  • Sincronización diferencial:

    • Diff-Match-Patch de Neil Fraser.
    • MobWrite aprovecha el algoritmo Diff-Match-Patch.
  • CRDT (Datos Replicados Conmutativos Tipo):

    • Hay muchos algoritmos CRDT diferentes que permiten la implementación de tipos compartidos. Algunos CRDT trabajan con la propagación de mensajes P2P, algunos se basan en modelos cliente-servidor
    • Yjs le permite compartir tipos de datos arbitrarios (Texto enriquecido, Matriz, Mapas Hash,.. extensible). Soporte offline y soporte para protocolos de comunicación P2P (hay módulos para XMPP, Websockets y WebRTC)
    • SwarmJS Cliente servidor base de datos compartida con offline apoyo. Funciona bien con React
    • Woot Una implementación del CRDT Woot
    • CRDT Otra implementación de CRDT
    • Automerge
 21
Author: dmonad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-08 20:09:48

OT Bibliotecas:

Dentro del proyecto HWIOS websocket, he utilizado con éxito una combinación de ambos(py-infinote en el lado del servidor, jinfinote en el lado del cliente) para sincronizar los estados del documento.

 6
Author: Phrearch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-13 20:03:09

El ot.biblioteca js https://github.com/Operational-Transformation/ot.js puede ser útil para escenarios multiusuario.

 5
Author: Jarnal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-11 20:50:01
 4
Author: Peter Parente,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-30 12:29:32

Las soluciones llave en mano o "arrastrar y soltar" para este problema realmente no han existido debido a la complejidad de sincronizar de manera confiable el estado mutable compartido. la respuesta de dmonad es un resumen decente, y he publicado un resumen más actualizado de las soluciones disponibles aquí.

Esta pregunta es bastante antigua, pero Convergence (descargo de responsabilidad: Soy un fundador) proporciona la solución más llave en mano que existe, proporcionando no solo sincronización de datos, sino una serie de otras API útiles para construyendo una experiencia de usuario colaborativa. Aquí hay un ejemplo que muestra exactamente lo que solicitó: sincronización de un campo de texto entre varios clientes.

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

 4
Author: alalonde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-26 16:51:35
 2
Author: Ryan D. Hatch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-11 07:22:55

Con una lib de cliente js (Strophe.js) podría utilizar un servidor XMPP gratuito (como jabber.org) junto con mi OT lib del lado del cliente (JSOTTEST) para construir un sistema cliente-servidor completo.

Enviaré el src de un sistema de chat cliente-servidor de demostración cuando tenga tiempo de revisar el código.

 2
Author: user981836,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-06 08:58:05

Npm tiene algunas bibliotecas ot para node.js:

  • https://npmjs.org/package/ot adapters adaptadores para codemirror y ace integrados, así como una implementación de cliente y servidor
  • https://npmjs.org/package/changesets library biblioteca ot simple utilizable en el nodo y el navegador; le permite construir 'conjuntos de cambios' (esencialmente diffs) que puede enviar, transformar unos contra otros y aplicar en un documento
 2
Author: guest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-13 15:44:25

Podrías hablar con los chicos de Cedanet. Aunque Ceda es de código cerrado y no hay prueba gratuita disponible en su sitio web. He estado involucrado en el desarrollo de Ceda y sigo trabajando con él en proyectos comerciales, por lo que podría ser capaz de proporcionar algunos comentarios/consejos si usted va por este camino.

 1
Author: Daniel Paull,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-28 09:12:28

Yo cosa etherpad.org con etherpad lite es superior a otras soluciones.

 1
Author: gorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-23 10:49:21

Estamos creando un editor de collaborate que combina la Transformación Operativa con el control de versiones. De esa manera podemos apoyar tanto, fuera de línea y collab en línea. Ayer lanzamos nuestra propia biblioteca OT como parte de nuestra pila de código abierto.

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

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

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

 1
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-10 10:59:01

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

Https://github.com/marcelklehr/gulf

 0
Author: Marcel Klehr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-01 20:19:42