Совместное редактирование в режиме реального времени требует нескольких вещей, чтобы быть эффективным.Большинство других ответов здесь сосредоточены только на одном аспекте проблемы;а именно распределенное состояние (он же shared-mutable-state).Операционное преобразование (OT), бесконфликтные реплицируемые типы данных (CRDT), дифференциальная синхронизация и другие связанные технологии - все это подходы к достижению распределенного состояния почти в реальном времени.Большинство фокусируется на возможной согласованности, которая допускает временные расхождения каждого из состояний участников, но гарантирует, что каждое состояние участников в конечном итоге сходится при остановке редактирования.В других ответах упоминалось несколько реализаций этих технологий.
Однако, как только вы поделились изменяемым состоянием, вам потребуется несколько других функций, чтобы обеспечить разумный пользовательский опыт.Примеры этих дополнительных концепций включают в себя:
- Идентичность : Кто те люди, с которыми вы сотрудничаете.
- Присутствие : Кто в настоящее время«Здесь» редактирование с вами сейчас.
- Связь : чат, аудио, видео и т. д., которые позволяют пользователям координировать действия
- Совместная работа Cueing: функции, которые указывают на то, что другие участники делают и / или собираются сделать.
Общие курсоры и выборки являются примерами Collaborative Cueing (также известной как Collaboration Awareness).Они помогают пользователям понять намерения и вероятные последующие действия других участников.Оригинальный постер частично спрашивал о взаимодействии между общим изменяемым состоянием и совместной репликой.Это важно, потому что расположение курсора или выделения в документе обычно описывается через местоположения в документе.Проблема в том, что расположение курсора (например) зависит от контекста документа.Когда я говорю, что мой курсор имеет индекс 37, это означает, что в документе, на который я смотрю, находится символ 37.Документ, который вы можете иметь прямо сейчас, может отличаться от моего из-за ваших правок или изменений других пользователей, и поэтому индекс 37 в вашем документе может быть неправильным.
Таким образом, механизм, который вы используете для распределения местоположений курсорадолжен быть каким-то образом интегрирован в механизм системы или, по крайней мере, знать о механизме, обеспечивающем одновременное управление общим изменяемым состоянием.Сегодня одной из проблем является то, что, хотя существует множество OT / CRDT, двунаправленных сообщений, чатов и других библиотек, они представляют собой изолированные решения, которые не являются интегрированными.Это затрудняет создание системы конечного пользователя, обеспечивающей хороший пользовательский опыт и часто приводящей к техническим трудностям, оставленным разработчику на усмотрение.
В конечном счете, для реализации эффективной системы совместного редактирования в реальном времени вынеобходимо учитывать все эти аспекты;и мы даже не обсуждали историю, авторизацию, разрешение конфликтов на уровне приложений и многие другие аспекты.Вы должны создать или найти технологии, которые поддерживают каждую из этих концепций таким образом, чтобы это имело смысл для вашего варианта использования.Затем вы должны интегрировать их.
Хорошая новость заключается в том, что приложения, поддерживающие совместное редактирование, становятся все более популярными.Технологии, которые поддерживают их создание, становятся зрелыми, и новые становятся доступными каждый месяц. Firebase было одним из первых решений, которое попыталось объединить многие из этих концепций в простой в использовании API.Новичок Convergence (полное описание, я являюсь основателем Convergence Labs), предоставляет универсальный API, который поддерживает большинство из этих аспектов совместного редактирования и может значительно сократить время, затраты,и сложность создания приложений для совместного редактирования в реальном времени.