Estoy buscando una biblioteca que me permita sincronizar texto en tiempo real entre múltiples usuarios (ala Google Docs).
Me encontré con Operational Transformation, que parece satisfacer mis necesidades. Habiendo dicho eso, 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 de JavaScript de arrastrar y soltar que se engancharía en un área de texto, generaría las transformaciones y luego me permitiría aplicar esas transformaciones en otro cliente.
(Obtuve la fuente de Etherpad, pero no puedo sacarle cabeza ni cruz. Si alguien pudiera señalar cómo aprovechar la implementación de OT de Etherpad, ¡eso también sería genial!)
transform
etherpad
operational
jugadores2000
fuente
fuente
Respuestas:
Creo que algunas partes de la implementación de OT de Google Wave son de código abierto (y vendrán más partes).
No estoy seguro de si esto es lo que está buscando, pero una alternativa a OT es la sincronización diferencial :
fuente
Uno de los antiguos ingenieros de Wave ha lanzado una implementación de Coffeescript de su algoritmo de edición colaborativa llamado ShareJS, ahora llamado ShareDB .
fuente
Resumiré las soluciones que encontré.
Transformación operativa: Ej.
Sincronización diferencial:
CRDT (tipo de datos replicados conmutativos):
fuente
Bibliotecas OT:
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 de los documentos.
fuente
La biblioteca ot.js https://github.com/Operational-Transformation/ot.js puede ser útil para escenarios de múltiples usuarios.
fuente
https://github.com/opencoweb/coweb
fuente
Las soluciones "llave en mano" o "arrastrar y soltar" para este problema no han existido realmente debido a la complejidad de sincronizar de manera confiable el estado mutable compartido. La respuesta de dmonad es un resumen decente, y publiqué una descripción general más actualizada 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 construir una UX colaborativa. A continuación se muestra un ejemplo que muestra exactamente lo que solicitó: sincronización de un campo de texto en varios clientes.
De lo contrario, ShareDB es una excelente solución de código abierto que se adapta a las necesidades de muchas personas.
fuente
Consulte también estas bibliotecas de JavaScript:
fuente
Con una biblioteca de cliente js (Strophe.js), puede usar un servidor XMPP gratuito (como jabber.org) junto con mi biblioteca OT 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.
fuente
Npm tiene algunas bibliotecas de ot agradables para node.js:
fuente
Podrías hablar con los chicos de Cedanet . Aunque Ceda es de código cerrado y no hay una prueba gratuita disponible en su sitio web. He estado involucrado en el desarrollo de Ceda y continúo trabajando con él en proyectos comerciales, por lo que podría proporcionar algunos comentarios / consejos si sigues este camino.
fuente
Creo que etherpad.org con etherpad lite es superior a otras soluciones.
fuente
Estamos creando un editor colaborativo que combina la transformación operativa con el control de versiones. De esa manera podemos apoyar la colaboración tanto en línea como fuera de línea. Ayer lanzamos nuestra propia biblioteca de 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
fuente
He escrito una pequeña biblioteca de unixy (haz una cosa y hazlo bien) que implementa una capa de control de OT, lo que te permite conectar diferentes tipos de OT (admite todos los tipos compatibles con shareJS). Es similar a shareJS pero menos obstinado y más abstracto.
https://github.com/marcelklehr/gulf
fuente