Библиотека оперативного преобразования?


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

я наткнулся на оперативное преобразование, которое, кажется, соответствует моим потребностям. Сказав это, я понимаю суть OT, но не математику и не реализацию OT.

таким образом, мне было интересно, есть ли библиотека Javascript drag'n'Drop, которая будет подключаться к текстовой области, генерировать преобразования, а затем разрешать мне применять их преобразования на другого клиента?

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

14 95

14 ответов:

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

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

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

я подытожу решения, которые я нашел.

  • Оперативное преобразование: например.

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

    • 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
    • Automerge

OT библиотеки:

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

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

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

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

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

также проверьте эти библиотеки Javascript:

с клиентской библиотекой js (строфа.js) вы можете использовать бесплатный сервер XMPP (например jabber.org) вместе с моей клиентской частью OT lib (JSOTTEST) для создания полной клиент-серверной системы.

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

Npm имеет несколько хороших библиотек ot для узла.js:

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

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

Я вещь etherpad.org с etherpad lite превосходит другие решения.

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

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

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

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

Я написал небольшую библиотеку unixy (do one thing and do it well), которая реализует уровень управления OT, позволяющий подключать различные типы OT (поддерживает все совместимые типы shareJS). Это похоже на shareJS, но менее самоуверенно и более абстрактно.

https://github.com/marcelklehr/gulf