Frage

Ich bin für eine Bibliothek suchen, der mir Text in Echtzeit zwischen mehreren Benutzern zu synchronisieren erlauben würde (ala Google Docs).

Ich habe auf Operational Transformation gestolpert, die meine Bedürfnisse zu passen scheint. Having said that, ich den Kern von OT verstehen, aber nicht die Mathematik noch Implementierung von OT.

So ich mich gefragt, ob es eine Drag'n'Drop Javascript-Bibliothek war die in einen Textbereich Haken würde, erzeugt die Transformationen, ermöglichen dann ich diese Transformationen auf einem anderen Client anwenden?

(Ich habe die Etherpad Quelle bekommen, aber ich kann nicht machen Kopf oder Schwanz aus ihm heraus. Wenn jemand darauf hinweisen könnte, wie man Einfluss auf Etherpad der OT Implementierung, dass auch groß sein wird!)

War es hilfreich?

Lösung

Ich denke, dass Teile von Google Wave OT Implementierung sind Open Source (und mehr Teile kommen).

Ich bin mir nicht sicher, ob dies ist, was Sie suchen, aber eine Alternative zu OT ist Differential Synchronisation :

Andere Tipps

Einer der Ex-Wave-Ingenieure hat eine Coffee Umsetzung seines gemeinsamen Bearbeitung Algorithmus namens ShareJS freigegeben, jetzt unter dem Namen ShareDB .

Ich werde die Lösungen zusammenfassen ich gefunden.

  • Operational Transformation. Z. B

    • Google Wave OT. Der Ansatz basiert auf dem so genannten Jupiter-Ansatz.
    • ShareJs. Basierend auf dem gleichen OT Algorithmus wie Google Wave OT.
    • COWEB-jsoe. Basierend auf COT -. Einen sehr anspruchsvollen OT Ansatz, dass auch p2p Nachrichtenausbreitung unterstützt
    • OpenCoweb. Es nutzt OpenCoweb-jsoe um einen vollwertigen Rahmen für viele ähnliche Probleme.
    • OT.js basiert auf den Betriebsarten von ShareJs.
    • DriveSDK. Eine sehr interessante API, die eine Menge Dinge tun - zum Beispiel Zusammenarbeit auf Graphen.
    • SwellRT ist ein Fork von Apache Wave. Ist ist föderierten und unterstützt Rich-Text.
  • Differential Synchronisation:

    • Diff-Match-Patch von Neil Fraser.
    • MobWrite nutzt den Diff-Match-Patch-Algorithmus.
  • CRDT (Commutative replizierten Datentyp):

    • Es gibt viele verschiedene CRDT Algorithmen, die die Umsetzung von gemeinsam genutzten Arten ermöglichen. Einige CRDTs Arbeit mit P2P-Nachrichtenausbreitung, einige verlassen sich auf Client-Server-Modelle
    • yjs können Sie beliebige Datentypen (RichText-, Array, Hash Karten teilen .. Erweiterbar). Offline-Unterstützung und Unterstützung für P2P-Kommunikationsprotokolle (gibt es Module für XMPP, Websockets und WebRTC)
    • SwarmJS Client-Server gemeinsam genutzte Datenbank mit Offline-Unterstützung. Funktioniert gut mit Reagieren
    • Woot Eine Implementierung der Woot CRDT
    • CRDT Eine weitere CRDT Implementierung
    • AutoMerge

OT Bibliotheken:

Im HWIOS websocket Projekt, ich habe eine Kombination aus beidem (py-infinote am server, jinfinote bei Clientside) zu sync Dokument heißt es erfolgreich verwendet wird.

Die ot.js Bibliothek https://github.com/Operational-Transformation/ot.js kann für Multi-User-Szenarien nützlich sein.

Turnkey oder „drag and drop“ Lösungen für dieses Problem nicht wirklich aufgrund der Komplexität existierten gemeinsamen wandelbar Zustand zuverlässig zu synchronisieren. dmonad Antwort ist ein anständiger Roundup, und ich schrieb einen mehr up-to-date Überblick über die verfügbaren Lösungen hier .

Diese Frage ist ziemlich alt, aber Convergence (Disclaimer: Ich bin ein Gründer) bietet die Komplettlösung gibt, , nicht nur die Datensynchronisation, sondern eine Vielzahl von anderen APIs nützlich für den Aufbau aus einer kollaborativen UX bietet. Hier ist ein Beispiel zeigt genau das, was Sie angefordert: Synchronisation eines Textfeldes über mehrere Clients.

Ansonsten ShareDB ist eine große Open-Source-Lösung, die eine Menge Leute, die Bedürfnisse passt.

Sie können auch diese Javascript-Bibliotheken:

Mit einem js Client lib (Strophe.js) Sie einen kostenlosen XMPP-Server (wie jabber.org) zusammen mit meinem clientseitigen OT lib (JSOTTEST) verwenden könnten ein vollständiges Client-Server-System zu bauen.

Ich werde das src eines Demo-Client-Server-Chat-System einreichen, wenn ich Zeit habe, um den Code zu ändern.

Npm hat einige schöne ot Bibliotheken für node.js:

  • https://npmjs.org/package/ot - Adapter für Codemirror und ace eingebaut sowie ein Client und Server-Implementierung
  • https://npmjs.org/package/changesets - Ebene ot Bibliothek verwendbar in Knoten und der Browser; können Sie bauen ‚Changesets‘ (im Wesentlichen diffs), dass Sie an einem Dokument
  • gegeneinander und anwenden senden um können, verwandeln

Sie könnten zu den Jungs sprechen unter Cedanet . Obwohl Ceda ist Closed-Source und keine kostenlose Testversion ist auf ihrer Website zur Verfügung. Ich habe bei der Entwicklung von Ceda und weiter mit ihm arbeitet in kommerziellen Projekten beteiligt, so dass ich ein Feedback / Beratung liefern kann, wenn Sie auf diesem Weg leiten.

Ich Sache etherpad.org mit Etherpad lite ist besser als bei anderen Lösungen.

Wir bauen einen collaborate Editor, dass kombiniert Operational Transformation mit Versionierung. Auf diese Weise können wir beide, Offline- und Online-collab unterstützen. Wir veröffentlichten unsere eigene OT Bibliothek gestern im Rahmen unseres Open-Source-Stack.

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

Wir haben auch eine Bibliothek beigetragen zur Versionierung.

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

Ich habe eine kleine Unixy geschrieben (noch etwas tun und tut es auch) Bibliothek, dass Geräte eine OT-Steuerschicht, so dass Sie in verschiedenen OT-Typen (unterstützt alle shareJS kompatible Typen) stopfen. Es ist ähnlich wie shareJS aber weniger eigenwillig und abstrakter.

https://github.com/marcelklehr/gulf

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top