Библиотека оперативной трансформации?

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

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

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

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

Я подведу итоги решениям, которые я нашел.

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

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

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

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

Ответ 4

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

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

Ответ 7

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

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

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

Ответ 9

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

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

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

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

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

Ответ 14

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

https://github.com/marcelklehr/gulf