Библиотека оперативной трансформации?
Я ищу библиотеку, которая позволит мне синхронизировать текст в режиме реального времени между несколькими пользователями (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) для синхронизации состояний документа.
Ответ 5
Библиотека ot.js https://github.com/Operational-Transformation/ot.js может быть полезна для многопользовательских сценариев.
Ответ 6
https://github.com/opencoweb/coweb
Ответ 7
Решения "под ключ" или "перетаскивание" этой проблемы на самом деле не существуют из-за сложности надежной синхронизации общего измененного состояния. Ответ dmonad - достойный обзор, и я опубликовал более современный обзор доступных решений здесь.
Этот вопрос довольно старый, но Convergence (отказ от ответственности: я - основатель) предоставляет большинство решений "под ключ" там, обеспечивая не только синхронизацию данных, но и множество других API, полезных для создания совместного UX. Вот пример, показывающий именно то, что вы запросили: синхронизация текстового поля между несколькими клиентами.
В противном случае, ShareDB - отличное решение с открытым исходным кодом, которое подходит многим людям.
Ответ 8
Также проверьте эти библиотеки Javascript:
Ответ 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