La edición colaborativa en tiempo real requiere varias cosas para ser efectiva. La mayoría de las otras respuestas aquí se enfocan solo en un aspecto del problema; a saber, estado distribuido (también conocido como estado mutable compartido). La Transformación Operacional (OT), los Tipos de Datos Replicados Libres de Conflicto (CRDT), la Sincronización Diferencial y otras tecnologías relacionadas son todos enfoques para lograr un estado distribuido casi en tiempo real. La mayoría se enfoca en la consistencia eventual, que permite las divergencias temporales de cada uno de los participantes, pero garantiza que cada estado de los participantes finalmente converge cuando se detiene la edición. Otras respuestas han mencionado varias implementaciones de estas tecnologías.
Sin embargo, una vez que haya compartido el estado mutable, necesita varias otras características para proporcionar una experiencia de usuario razonable. Ejemplos de estos conceptos adicionales incluyen:
- Identidad: ¿Quién las personas que están colaborando, lo son.
- Presencia: ¿Quién está editando actualmente "aquí" con usted ahora?
- Comunicación: Chat, audio, vídeo, etc., que permiten a los usuarios para coordinar las acciones
- Colaboración la orientación atencional: Características que dan indicaciones acerca de lo que los otros participantes están haciendo y/o están a punto de hacerlo.
Los cursores y las selecciones compartidos son ejemplos de Búsqueda colaborativa (a.k. un Conocimiento de colaboración). Ayudan a los usuarios a comprender las intenciones y las próximas acciones de los otros participantes. El póster original preguntaba en parte sobre la interacción entre el estado mutable compartido y el cueing colaborativo. Esto es importante porque la ubicación de un cursor o selección en un documento se describe típicamente a través de ubicaciones dentro del documento. El problema es que la ubicación de un cursor (por ejemplo) depende del contexto del documento. Cuando digo que mi cursor está en el índice 37, eso significa el carácter 37 en el documento que estoy viendo. El documento que puede tener en este momento puede ser diferente al mío, debido a sus ediciones o las de otros usuarios, y, por lo tanto, el índice 37 en su documento puede no ser correcto.
Por lo tanto, el mecanismo que utiliza para distribuir las ubicaciones del cursor debe integrarse de algún modo o al menos conocer el mecanismo del sistema que proporciona control de concurrencia sobre el estado mutable compartido. Uno de los desafíos actuales es que si bien existen muchas OT/CRDT, mensajería bidireccional, chat y otras bibliotecas, son soluciones aisladas que no están integradas. Esto dificulta la construcción de un sistema de usuario final que brinde una buena experiencia de usuario y, a menudo, genera desafíos técnicos que el desarrollador debe resolver.
En última instancia, para implementar un sistema eficaz de edición colaborativa en tiempo real, debe tener en cuenta todos estos aspectos; y ni siquiera hemos discutido historia, autorización, resolución de conflictos a nivel de aplicación y muchas otras facetas. Debe crear o encontrar tecnologías que respalden cada uno de estos conceptos de una manera que tenga sentido para su caso de uso. Entonces debes integrarlos.
La buena noticia es que las aplicaciones que admiten edición colaborativa son cada vez más populares. Las tecnologías que las respaldan están madurando y cada mes están disponibles nuevas. Firebase fue una de las primeras soluciones que intentó incluir muchos de estos conceptos en una API fácil de usar. Un recién llegado Convergence (descripción completa, soy fundador de Convergence Labs), proporciona una API todo en uno que admite la mayoría de estas facetas de edición colaborativa y puede reducir significativamente el tiempo, el costo y la complejidad de la creación en tiempo real aplicaciones colaborativas de edición.
Así que si tuviera que usar http://code.google.com/p/google-diff-match-patch/, y decir generar un diff cada 0.5 segundos, enviarlo al servidor y extraer todas las demás diferencias y devolverlos desde el servidor, ¿crees que eso funcionaría? ¿No sería esto una gran cantidad de datos almacenados en la base de datos? –
Probablemente sea mucho más costoso en términos de recursos en comparación con la Transformación operativa real. Supongo que podría funcionar si tienes pocos usuarios. –
Si está buscando una implementación de transformación operativa, le sugiero buscar en Google-MobWrite (se puede encontrar el enlace en la pregunta vinculada). – gamers2000