Я ищу библиотеку, которая позволила бы мне синхронизировать текст в реальном времени между несколькими пользователями (например, Google Docs).
Я наткнулся на Operational Transformation, который, кажется, соответствует моим потребностям. Сказав это, я понимаю суть ОТ, но не математику и не реализацию ОТ.
Таким образом, мне было интересно, существует ли библиотека Javascript drag'n'drop, которая будет подключаться к текстовой области, генерировать преобразования, а затем позволять мне применять эти преобразования на другом клиенте?
(У меня есть исходный код Etherpad, но я не могу разобраться в этом. Если бы кто-нибудь мог указать, как использовать реализацию Etherpad OT, это тоже будет здорово!)
transform
etherpad
operational
геймеры2000
источник
источник
Ответы:
Я думаю, что части реализации OT Google Wave имеют открытый исходный код (и скоро появятся новые части).
Я не уверен, что это то, что вы ищете, но альтернативой OT является дифференциальная синхронизация :
источник
Один из бывших инженеров Wave выпустил на Coffeescript реализацию своего алгоритма совместного редактирования под названием ShareJS, теперь называемого ShareDB .
источник
Обобщу найденные решения.
Операционная трансформация: например
Дифференциальная синхронизация:
CRDT (коммутативный реплицированный тип данных):
источник
Библиотеки OT:
В рамках проекта веб-сокета HWIOS я успешно использовал комбинацию обоих (py-infinote на стороне сервера, jinfinote на стороне клиента) для синхронизации состояний документа.
источник
Библиотека ot.js https://github.com/Operational-Transformation/ot.js может быть полезна для многопользовательских сценариев.
источник
https://github.com/opencoweb/coweb
источник
Готовых решений этой проблемы или «перетаскивания» на самом деле не существовало из-за сложности надежной синхронизации общего изменяемого состояния. Ответ dmonad является достойной облавой, и я разместил обзор более уточненный доступных решений здесь .
Это довольно старый вопрос, но Convergence (отказ от ответственности: я являюсь основателем) предоставляет наиболее готовое решение, обеспечивая не только синхронизацию данных, но и множество других API, полезных для создания совместного UX. Вот пример, показывающий именно то, что вы просили: синхронизацию текстового поля между несколькими клиентами.
В остальном ShareDB - отличное решение с открытым исходным кодом, удовлетворяющее потребности многих людей.
источник
Также ознакомьтесь с этими библиотеками Javascript:
источник
С клиентской библиотекой js (Strophe.js) вы можете использовать бесплатный сервер XMPP (например, jabber.org) вместе с моей клиентской библиотекой OT (JSOTTEST) для создания полной клиент-серверной системы.
Я отправлю src демонстрационной системы чата клиент-сервер, когда у меня будет время для доработки кода.
источник
В Npm есть несколько хороших библиотек для node.js:
источник
Вы могли бы поговорить с ребятами из Cedanet . Хотя 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
источник