Je recherche une bibliothèque qui me permettrait de synchroniser du texte en temps réel entre plusieurs utilisateurs (ala Google Docs).
Je suis tombé sur la transformation opérationnelle, qui semble répondre à mes besoins. Cela dit, je comprends l'essentiel de l'OT, mais pas les mathématiques ni la mise en œuvre de l'OT.
Ainsi, je me demandais s'il y avait une bibliothèque Javascript drag'n'drop qui s'accrocherait à une zone de texte, générerait les transformations, puis me permettrait d'appliquer ces transformations sur un autre client?
(J'ai obtenu la source Etherpad, mais je ne peux pas m'en sortir. Si quelqu'un pouvait expliquer comment tirer parti de l'implémentation OT d'Etherpad, ce sera bien aussi!)
transform
etherpad
operational
gamers2000
la source
la source
Réponses:
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 recherchez, mais une alternative à OT est la synchronisation différentielle :
la source
L'un des anciens ingénieurs de Wave a publié une implémentation Coffeescript de son algorithme d'édition collaboratif appelé ShareJS, maintenant nommé ShareDB .
la source
Je vais résumer les solutions que j'ai trouvées.
Transformation opérationnelle: par ex.
Synchronisation différentielle:
CRDT (type de données répliquées commutatives):
la source
Bibliothèques OT:
Dans le projet Websocket HWIOS, j'ai utilisé avec succès une combinaison des deux (py-infinote côté serveur, jinfinote côté client) pour synchroniser les états des documents.
la source
La bibliothèque ot.js https://github.com/Operational-Transformation/ot.js peut être utile pour les scénarios multi-utilisateurs.
la source
https://github.com/opencoweb/coweb
la source
Les solutions clés en main ou «glisser-déposer» à ce problème n'existaient pas vraiment en raison 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 (clause de non-responsabilité: je suis un fondateur) fournit la solution la plus clé en main, fournissant non seulement la synchronisation des données, mais une foule d'autres API utiles pour créer 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 à de nombreux besoins.
la source
Consultez également ces bibliothèques Javascript:
la source
Avec une bibliothèque client js (Strophe.js), vous pouvez utiliser un serveur XMPP gratuit (comme jabber.org) avec ma bibliothèque OT côté client (JSOTTEST) pour construire un système client-serveur complet.
Je soumettrai le src d'un système de discussion client-serveur de démonstration lorsque j'aurai le temps de réviser le code.
la source
Npm a de belles bibliothèques ot pour node.js:
la source
Vous pourriez parler aux gars de Cedanet . Bien que Ceda soit une source fermée et qu'aucun essai gratuit ne soit disponible sur leur site Web. J'ai été impliqué dans le développement de Ceda et je continue à travailler avec lui dans des projets commerciaux, donc je pourrais peut-être fournir des commentaires / conseils si vous vous dirigez dans cette voie.
la source
Je pense que etherpad.org avec etherpad lite est supérieur aux autres solutions.
la source
Nous construisons un éditeur collaboratif qui combine la transformation opérationnelle et la gestion des versions. De cette façon, nous pouvons prendre en charge les collaborations hors ligne et en ligne. Nous avons publié notre propre bibliothèque OT hier dans le cadre de notre pile open source.
http://interior.substance.io/modules/operator.html
Nous avons également fourni une bibliothèque pour le contrôle des versions.
http://interior.substance.io/modules/chronicle.html
la source
J'ai écrit une petite bibliothèque unixy (faites une chose et faites-la bien) qui implémente une couche de contrôle OT, vous permettant de brancher différents types OT (prend en charge tous les types compatibles shareJS). C'est similaire à shareJS mais moins opiniâtre et plus abstrait.
https://github.com/marcelklehr/gulf
la source