Вопрос

Я ищу библиотеку, которая позволила бы мне синхронизировать текст в режиме реального времени между несколькими пользователями (например, Документы Google).

Я наткнулся на Операционную трансформацию, которая, кажется, соответствует моим потребностям.При этом я понимаю суть ОТ, но не математику и не реализацию ОТ.

Таким образом, мне было интересно, существует ли библиотека Javascript с возможностью перетаскивания, которая могла бы подключаться к текстовой области, генерировать преобразования, а затем позволять мне применять эти преобразования к другому клиенту?

(Я получил исходный код Etherpad, но не могу разобраться в нем.Если кто-нибудь подскажет, как можно использовать реализацию OT в Etherpad, это тоже будет здорово!)

Это было полезно?

Решение

Я думаю, что некоторые части реализации OT Google Wave имеют открытый исходный код (и в будущем появятся новые части).

Я не уверен, что это то, что вы ищете, но альтернативой ОТ является Дифференциальная синхронизация:

Другие советы

Один из бывших инженеров Wave выпустил реализацию Coffeescript своего алгоритма совместного редактирования под названием ShareJS, который теперь называется ShareDB.

Я суммирую найденные мной решения.

  • Операционная трансформация:Например.

    • Гугл Вейв ОТ.Подход основан на так называемом подходе Юпитера.
    • ShareJs.Основан на том же алгоритме OT, что и Google Wave OT.
    • Coweb-jsoe.На основе COT — очень сложного подхода OT, который также поддерживает распространение сообщений p2p.
    • OpenCoweb.Он использует OpenCoweb-jsoe, чтобы предоставить полноценную платформу для решения множества подобных задач.
    • OT.js основан на типах операций ShareJs.
    • ДискSDK.Очень интересный API, который может многое — например.совместная работа над графиками.
    • SwellRT — это форк Apache Wave.Является федеративным и поддерживает форматированный текст.
  • Дифференциальная синхронизация:

    • Diff-Match-Patch от Нила Фрейзера.
    • MobWrite использует алгоритм Diff-Match-Patch.
  • CRDT (Коммутативный тип реплицируемых данных):

    • Существует множество различных алгоритмов CRDT, которые позволяют реализовать общие типы.Некоторые CRDT работают с распространением сообщений P2P, некоторые полагаются на модели клиент-сервер.
    • YJS позволяет делиться произвольными типами данных (RichText, Array, Hash Maps, ..расширяемый).Оффлайн-поддержка и поддержка протоколов связи P2P (есть модули для XMPP, Websockets и WebRTC)
    • SwarmJS Общая база данных клиент-сервер с автономной поддержкой.Хорошо работает с React
    • Вут Реализация Woot CRDT
    • CRDT Еще одна реализация CRDT
    • Автослияние

Библиотеки ОТ:

В проекте веб-сокета HWIOS я успешно использовал комбинацию обоих (py-infinote на стороне сервера, jinfinote на стороне клиента) для синхронизации состояний документа.

Библиотека ot.js https://github.com/Operational-Transformation/ot.js может быть полезно для многопользовательских сценариев.

Решения этой проблемы «под ключ» или «перетаскивания» на самом деле не существовало из-за сложности надежной синхронизации общего изменяемого состояния.Ответ dmonad представляет собой достойный обзор, и я опубликовал более актуальный обзор доступных решений. здесь.

Этот вопрос довольно старый, но Конвергенция (отказ от ответственности:Я основатель) предоставляет наиболее готовое решение, обеспечивающее не только синхронизацию данных, но и множество других API, полезных для создания совместного пользовательского интерфейса. Вот пример показывая именно то, что вы просили:синхронизация текстового поля между несколькими клиентами.

В противном случае, ShareDB — отличное решение с открытым исходным кодом, которое отвечает потребностям многих людей.

Также ознакомьтесь с этими библиотеками Javascript:

С клиентской библиотекой js (Strope.js) вы можете использовать бесплатный сервер XMPP (например, jabber.org) вместе с моей клиентской библиотекой OT (JSOTTEST) для создания полноценной клиент-серверной системы.

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

В Npm есть несколько хороших библиотек для node.js:

  • https://npmjs.org/package/ot -- встроенные адаптеры для codemirror и ace, а также реализация клиента и сервера
  • https://npmjs.org/package/changesets -- обычная библиотека, которую можно использовать в узле и браузере;позволяет вам создавать «наборы изменений» (по сути, различия), которые вы можете отправлять, преобразовывать друг против друга и применять к документу.

Вы могли бы поговорить с ребятами в Седанет.Хотя Ceda имеет закрытый исходный код, и на их веб-сайте нет бесплатной пробной версии.Я участвовал в разработке Ceda и продолжаю работать с ней в коммерческих проектах, поэтому, возможно, смогу предоставить некоторые отзывы/советы, если вы пойдете по этому пути.

Я считаю, что etherpad.org с etherpad lite превосходит другие решения.

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

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

Мы также предоставили библиотеку для управления версиями.

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

Я написал небольшую unixy-библиотеку (делай одно дело и делай это хорошо), которая реализует уровень управления OT, позволяя подключать различные типы OT (поддерживает все типы, совместимые с ShareJS).Он похож на ShareJS, но менее самоуверенный и более абстрактный.

https://github.com/marcelklehr/gulf

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top