Оперативное совместное редактирование - как это работает?

Я пишу приложение, в котором я хотел бы иметь псевдореальное время совместные особенности редактирования для документов (Очень похожий на редактирование стиля Google Documents).

Я знаю, как отслеживать позицию курсора, это просто. Просто опросите сервер, когда-либо наполовину второй или второй с текущим идентификатором пользователя, именем файла, номером строки и номером строки, который может быть сохранен в базе данных, и возвращаемое значение этого запроса опроса является положением курсоров другого пользователя.

То, что я не знаю, как сделать, обновить документ таким способом, которым он не отбросит Ваш курсор и вызовет полную перезагрузку, поскольку это было бы далеко для замедления в моих целях.

Это действительно только должно работать в Google Chrome, предпочтительно Firefox также. Я не должен поддерживать никакой другой браузер.

62
задан 23 February 2011 в 06:29

2 ответа

Я недавно опубликовал репозиторий с рабочим примером того, что кажется, что Вы пытаетесь достигнуть:

https://quill-sharedb-cursors.herokuapp.com

Это базируется прочь ShareDB (OT), работающий бэкендом и Игла визуальный редактор на frontend.

В основном просто провода все эти вещи с еще некоторый код для рисования курсоров . Код должен быть довольно прост понять и скопировать в любое определенное решение.

Hope это помогает с усилием.

0
ответ дан 31 October 2019 в 14:20

Оперативное совместное редактирование требует нескольких вещей быть эффективным. Большинство других ответов здесь фокусируется только на одном аспекте проблемы; а именно, распределенное состояние (иначе общее изменяемое состояние). Операционное преобразование (OT), Бесконфликтные Типы Тиражируемых данных (CRDT), Дифференциальная Синхронизация и другие связанные технологии является всеми подходами к достижению псевдореального времени распределенное состояние. Большая часть внимания на возможную непротиворечивость, которые позволяют временные расхождения каждого состояния участников, но гарантируют, что каждый участники заявляют, будет в конечном счете сходиться при редактировании остановок. Другие ответы упомянули несколько реализаций этих технологий.

Однако, после того как Вы совместно использовали изменяемое состояние, Вам нужны несколько других функций для обеспечения разумного пользовательского опыта. Примеры этих дополнительных понятий включают:

  • Идентификационные данные : Кто люди, с которыми Вы сотрудничаете.
  • Присутствие : Кто в настоящее время "здесь" редактирует с Вами теперь.
  • Коммуникация : Чат, аудио, видео, и т.д., которые позволяют пользователям координировать действия
  • Совместный Выдача: Функции, которые дают признаки относительно того, что другие участники делают и/или собираются сделать.

Общие курсоры и выборы являются примерами Совместной Выдачи (иначе Осведомленность Сотрудничества). Они помогают пользователям понять намерения и вероятно следующие действия других участников. Исходный плакат частично спрашивал о взаимодействии между общим изменяемым состоянием и совместной выдачей. Это важно, потому что местоположение курсора или выбора в документе обычно описывается через местоположения в рамках документа. Проблема - то, что местоположение курсора (например), зависит от контекста документа. Когда я говорю, что мой курсор в индексе 37, который означает символ 37 в документе, я смотрю на. Документ, который Вы можете иметь прямо сейчас, может отличаться, чем мой, из-за Ваших редактирований или тех из других пользователей, и поэтому индекс 37 в Вашем документе не может быть корректным.

Так механизм Вы используете для распределения позиций курсора, в нужно так или иначе интегрировать или по крайней мере знающий о механизме системы, которая обеспечивает управление совместным выполнением по общему изменяемому состоянию. Одна из проблем сегодня - то, что, в то время как существует много OT / CRDT, двунаправленный обмен сообщениями, чат и другие библиотеки там, они - изолированные решения, которые не интегрируются. Это мешает создавать систему конечного пользователя, которая обеспечивает хороший пользовательский опыт и часто приводит к техническим проблемам, оставленным разработчику выяснять.

В конечном счете, для реализации эффективной оперативной совместной системы редактирования необходимо рассмотреть все эти аспекты; и мы даже не обсудили историю, авторизацию, разрешение конфликтов прикладного уровня и много других фасетов. Необходимо создать или найти технологии, которые поддерживают каждое из этих понятий способом, которые имеют смысл для варианта использования. Затем необходимо интегрировать их.

хорошие новости - то, что приложения, которые поддерживают совместное редактирование, становятся намного более популярными. Технологии, которые поддерживают здание их, назревают, и новые становятся доступными каждый месяц. Firebase был одним из первых решений, которые пытались перенестись во многих из этих понятий в простой в использовании API. Вновь прибывший Сходимость (полное раскрытие, я - основатель Labs Сходимости), обеспечивает единый API, который поддерживает большинство этих совместных фасетов редактирования и может значительно уменьшить время, стоить, и сложность создания оперативных совместных приложений редактирования.

12
ответ дан 31 October 2019 в 14:20

Другие вопросы по тегам:

Похожие вопросы: