Question

Je suis à la recherche d'une bibliothèque qui me permettra de synchroniser le texte en temps réel entre plusieurs utilisateurs (ala Google Docs).

Je suis tombé par hasard sur la transformation opérationnelle, qui semble répondre à mes besoins. Cela dit, je comprends l'essentiel de OT, mais pas les mathématiques, ni la mise en œuvre d'OT.

Ainsi, je me demandais s'il y avait une bibliothèque Javascript drag'n'drop qui crochet dans une zone de texte, générer les transformations, puis me permettre d'appliquer ces transformations sur un autre client?

(je suis devenu la source Etherpad, mais je ne peux pas faire la tête ou la queue hors de lui. Si quelqu'un pourrait indiquer comment tirer parti de la mise en œuvre OT de Etherpad, ce sera très bien aussi!)

Était-ce utile?

La solution

Je pense que certaines parties de la mise en œuvre OT de Google Wave sont Open Source (et plus de pièces sont à venir).

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

Autres conseils

L'un des ingénieurs ex-Wave a publié une mise en œuvre coffeescript de son algorithme d'édition collaborative appelée ShareJS, maintenant nommé ShareDB .

Je vais résumer les solutions que je trouvais.

  • Transformation opérationnelle:. Par exemple

    • Google Wave OT. L'approche est basée sur l'approche dite Jupiter.
    • ShareJs. Basé sur le même algorithme OT comme Google Wave OT.
    • COWEB-jsoe. Sur la base de DUE -. Une approche OT très sophistiquée qui prend en charge également la propagation des messages p2p
    • OpenCoweb. Il tire parti OpenCoweb-jsoe afin de fournir un cadre à part entière pour beaucoup de problèmes similaires.
    • OT.js est basée sur le fonctionnement de types ShareJs.
    • DriveSDK. Une API très intéressante qui peut faire beaucoup de choses - par exemple la collaboration sur les graphes.
    • SwellRT est une fourche d'Apache Wave. Est est fédérée, et prend en charge le texte enrichi.
  • différentiel de synchronisation:

    • Diff-Match-Patch de Neil Fraser.
    • MobWrite met à profit l'algorithme Diff-Match-Patch.
  • CRDT (commutative répliquées Type de données):

    • Il y a beaucoup de différents algorithmes de CRDT qui permettent la mise en œuvre des types partagés. Certains CRDTs travaillent avec la propagation des messages P2P, certains comptent sur les modèles client-serveur
    • YJ vous permet de partager des types de données arbitraires (RichText, Array, cartes Hash, .. extensible). Offline support et de soutien pour les 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 mise en œuvre du Woot CRDT
    • CRDT Une autre implémentation CRDT
    • autoMerge

OT bibliothèques:

Dans le projet websocket HWIOS, je l'ai utilisé avec succès un combo de deux (py-infinote au Serverside, jinfinote à clientside) pour synchroniser les états de document.

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

Clé en main, ou « glisser-déposer » des solutions à ce problème n'a pas vraiment existé en raison de la complexité de l'état mutable synchroniser de manière fiable partagée. La réponse de dmonad est un tour d'horizon décent, et j'ai posté une vue d'ensemble plus à jour des solutions disponibles ici .

Cette question est assez vieux, mais convergence de (Attention: Je suis l'un des fondateurs) fournit la solution la plus clé en main là-bas , fournissant non seulement la synchronisation de données, mais une foule d'autres API utiles pour la construction d'une collaboration UX. Voici un exemple montrant exactement ce que vous avez demandé: synchronisation d'un champ de texte entre plusieurs clients.

Dans le cas contraire, ShareDB est une excellente solution open source qui correspond à un grand nombre de besoins des gens.

Consultez également ces bibliothèques Javascript:

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

Je soumettrai le src d'un système de chat client-serveur démo quand j'ai le temps de réviser le code.

Npm a quelques belles bibliothèques pour Node.js ot:

  • https://npmjs.org/package/ot - adaptateurs pour CodeMirror et as construit ainsi qu'une implémentation client et serveur
  • https://npmjs.org/package/changesets - bibliothèque simple ot utilisable dans le noeud et le navigateur; vous permet de construire « » (essentiellement changesets diffs) que vous pouvez envoyer autour, transformez les uns contre les autres et appliquer sur un document

Vous pouvez parler aux gars Cedanet . Bien que Ceda est la source fermée et aucun essai gratuit est disponible sur leur site web. Je suis impliqué dans le développement de Ceda et de continuer à travailler avec elle dans des projets commerciaux, donc je pourrais être en mesure de fournir des commentaires / conseils si vous vous dirigez dans cette voie.

chose que je etherpad.org avec lite EtherPad est supérieure à d'autres solutions.

Nous construisons un éditeur de collaborer qui combine la transformation opérationnelle avec versionnage. De cette façon, nous pouvons soutenir à la fois, en ligne et hors ligne collab. Nous avons publié notre bibliothèque hier OT dans le cadre de notre pile open source.

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

Nous avons également contribué une bibliothèque pour versioning.

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

Je l'ai écrit un petit unixy (faire une chose et le faire bien) bibliothèque qui met en oeuvre une couche de contrôle OT, ce qui vous permet de brancher différents types OT (prend en charge tous les types shareJS conformes). Il est similaire à shareJS mais moins dogmatiques et plus abstrait.

https://github.com/marcelklehr/gulf

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top