web-dev-qa-db-fra.com

Bibliothèque de transformation opérationnelle?

Je recherche une bibliothèque qui me permettrait de synchroniser du texte en temps réel entre plusieurs utilisateurs (comme Google Docs).

Je suis tombé sur une transformation opérationnelle qui semble correspondre à mes besoins. Cela dit, je comprends l'essentiel de l'ergothérapie, mais pas le calcul, ni sa mise en œuvre.

Ainsi, je me demandais s’il existait une bibliothèque JavaScript drag'n'drop pouvant s’intégrer dans une zone de texte, générer les transformations, puis me permettre d’appliquer ces transformations sur un autre client?

(J'ai la source Etherpad, mais je ne peux pas en tirer la tête. Si quelqu'un pouvait indiquer comment tirer parti de la mise en œuvre d'Etherpad OT, ce serait génial aussi!)

97
gamers2000

Je pense que certaines parties de la mise en œuvre OT de Google Wave sont Open Source (et d'autres parties sont à venir).

Je ne sais pas si c'est ce que vous cherchez, mais une alternative à OT est synchronisation différentielle :

56
Jörg W Mittag

L'un des ingénieurs de Wave a publié une implémentation Coffeescript de son algorithme d'édition collaborative appelé ShareJS, désormais nommé ShareDB .

42
hawkeye

Je vais résumer les solutions que j'ai trouvées.

  • Transformation opérationnelle: par exemple.

    • Google Wave OT. L'approche est basée sur l'approche dite de Jupiter.
    • ShareJs. Basé sur le même algorithme OT que Google Wave OT.
    • Coweb-jsoe. Basé sur COT - une approche très sophistiquée OT qui prend également en charge la propagation de messages p2p.
    • OpenCoweb. Il exploite OpenCoweb-jsoe afin de fournir un cadre complet pour de nombreux problèmes similaires. 
    • OT.js est basé sur les types d'opération de ShareJs. 
    • DriveSDK. Une API très intéressante qui peut faire beaucoup de choses - par exemple collaboration sur des graphiques.
    • SwellRT est une fourchette de Apache Wave. Is est fédéré et prend en charge le texte enrichi.
  • Synchronisation différentielle:

    • Diff-Match-Patch de Neil Fraser.
    • MobWrite exploite l'algorithme Diff-Match-Patch.
  • CRDT (type de données répliquées commutatives):

    • Il existe de nombreux algorithmes CRDT permettant l'implémentation de types partagés. Certains CRDT fonctionnent avec la propagation de messages P2P, d'autres s'appuient sur des modèles client-serveur
    • Yjs vous permet de partager des types de données arbitraires (RichText, Array, Hash Maps, .. extensible). Prise en charge hors ligne et prise en charge des protocoles de communication P2P (il existe des modules pour XMPP, Websockets et WebRTC)
    • SwarmJS Base de données partagée du serveur client avec prise en charge hors ligne. Fonctionne bien avec React
    • Woot Une implémentation du Woot CRDT
    • CRDT Une autre implémentation du CRDT
    • Automerge
24
dmonad

Bibliothèques OT:

Dans le projet Websocket de HWIOS, j'ai utilisé avec succès une combinaison des deux (py-infinote au niveau du serveur, jinfinote au niveau du client) pour synchroniser les états des documents.

6
Phrearch

La bibliothèque ot.js https://github.com/Operational-Transformation/ot.js peut être utile pour les scénarios multi-utilisateurs.

5
Jarnal
4
Peter Parente

Les solutions clé en main ou "glisser-déposer" à ce problème n'existent pas à cause de la complexité de la synchronisation fiable de l'état mutable partagé. La réponse de dmonad est un tour d'horizon décent, et j'ai posté un aperçu plus à jour des solutions disponibles ici

Cette question est assez ancienne, mais Convergence (disclaimer: je suis un fondateur) fournit la solution la plus clé en main, fournissant non seulement la synchronisation des données, mais également un hôte d'autres API utiles pour la création d'une UX collaborative. Voici un exemple montrant exactement ce que vous avez demandé: la synchronisation d'un champ de texte sur plusieurs clients. 

Sinon, ShareDB est une excellente solution open source qui répond aux besoins de beaucoup de gens.

4
alalonde

Avec un client js lib (Strophe.js), vous pouvez utiliser un serveur XMPP gratuit (comme Jabber.org) avec mon OT lib côté client (JSOTTEST) pour créer un système client-serveur complet.

Je soumettrai le src d'un système de discussion démo client-serveur lorsque j'aurai le temps de réviser le code.

2
user981836

Npm a quelques bibliothèques Nice ot pour node.js:

  • https://npmjs.org/package/ot - adaptateurs pour codemirror et ace intégrés, ainsi que pour une implémentation client et serveur
  • https://npmjs.org/package/changesets - bibliothèque plain ot utilisable dans le noeud et le navigateur; permet de construire des "changesets" (essentiellement des diffs) que vous pouvez envoyer, transformer les uns contre les autres et appliquer à un document
2
guest

Consultez également ces bibliothèques Javascript:

2
Ryan D. Hatch

Vous pouvez parler aux gars de Cedanet . Bien que Ceda soit une source fermée, aucun essai gratuit n’est disponible sur leur site web. J'ai été impliqué dans le développement de Ceda et continue à travailler avec lui dans des projets commerciaux. Je pourrais donc être en mesure de fournir des retours/conseils si vous vous dirigez dans cette voie.

1
Daniel Paull

Nous construisons un éditeur collaborate qui combine la transformation opérationnelle avec la gestion des versions. De cette façon, nous pouvons prendre en charge la collaboration, hors ligne et en ligne. Nous avons publié hier notre propre bibliothèque OT dans le cadre de notre pile open source.

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

Nous avons également contribué à une bibliothèque pour la gestion des versions.

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

1
Michael

Je pense que etherpad.org avec etherpad lite est supérieur aux autres solutions.

1
gorn

J'ai écrit une petite bibliothèque unixy (faire une chose et bien le faire) qui implémente une couche de contrôle OT, vous permettant de connecter différents types OT (prend en charge tous les types conformes à shareJS) . C'est semblable à shareJS mais moins d'opinion et plus abstrait.

https://github.com/marcelklehr/gulf

0
Marcel Klehr