2012-08-14 11 views
7

Ein Blick in Meteor, um eine kollaborative Dokumentbearbeitungs-App zu erstellen, weil es großartig ist, dass Meteor standardmäßig Daten zwischen mehreren Clients synchronisiert.Synchronisierung des Etherpad-Stils in Meteor?

Aber wenn ein Text-Bereich, wie in Sameer Kalburgi dem Beispiel
http://www.skalb.com/2012/04/16/creating-a-document-sharing-site-with-meteor-js/
http://docshare-tutorial.meteor.com/
die Erfahrung ist nicht optimal verwenden.

Ich habe versucht, gleichzeitig mit einem Kollegen zu schreiben und meine Änderungen würden überschrieben werden, wenn sie getippt und umgekehrt. In der Konfliktlösung gibt es also noch keinen Merge-Algorithmus, denke ich?

Ist dies für das Feature geplant? Gibt es Möglichkeiten, dies derzeit zu implementieren? Etherpad scheint mit diesem Problem ziemlich gut umzugehen. Wenn Sie diese Option in Meteor verwenden, wird das Erstellen von kollaborativen Dokumentenbearbeitungs-Apps wesentlich einfacher.

Antwort

0

Was Sie beschreiben, scheint aus Meteors Spielraum für mich. Es ist kein Werkzeug, um Kollaborationsmöglichkeiten einzurichten!

Was es bietet, ist eine Möglichkeit, transparent gegen eine Teilmenge einer Server-Datenbank zu arbeiten. Die Implementierung von Use-Case-spezifischen Merging-Funktionen ist jedoch Aufgabe der Anwendung, nicht des Frameworks.

+1

IMHO der ganze Sinn dieser Art von Anwendungen, die nicht nur, dass Kunden ist Synchron mit dem Server, aber dadurch synchronisieren sich alle angeschlossenen Benutzer miteinander. Wenn das nicht für Kollaborationsmöglichkeiten eingerichtet ist, weiß ich nicht was ist! –

+1

Und da die Konfliktlösung in Meteor eingebaut ist, scheint es keine so seltsame Frage zu sein, ob sie anspruchsvoller sein könnte. Aber natürlich, wenn Sie einen guten Weg kennen, um mich selbst in den Konfliktlösungsmechanismus einzuklinken, würde ich gerne wissen. –

+1

Okay, meine Formulierung ist vielleicht etwas ausgefallen. Was ich meinte ist, dass Meteor natürlich Kollaborationsszenarien unterstützt, aber nicht explizit darauf ausgerichtet ist. Man muss hier und da mit Ecken und Kanten rechnen. Was meinst du mit "Konfliktlösung ist eingebaut"? Alles, was ich in dieser Richtung in den Dokumenten finden konnte, ist, dass in Konfliktszenarien immer das erste Client-seitige Abonnement gewinnt. –

8

So sah ich in ihr etwas mehr, die in Etherpad verwendete Algorithmus als Operational Transformation bekannt ist:

Die Lösung ist Operational Transformation (OT). Wenn Sie noch nichts davon gehört haben, ist OT eine Klasse von Algorithmen, die Multi-Site Realtime Concurrency durchführen. OT ist wie Echtzeit-Git. Es funktioniert mit jeder Menge Verzögerung (von Null bis zu einem verlängerten Urlaub). Damit können Benutzer Live-Editing-Edits mit geringer Bandbreite durchführen. OT gibt Ihnen eine mögliche Konsistenz zwischen mehreren Benutzern ohne Wiederholungen, ohne Fehler und ohne dass Daten überschrieben werden.

Leider ist die Implementierung von OT saugt. Es gibt eine Million Algorithmen mit unterschiedlichen Kompromissen, die meist in wissenschaftlichen Arbeiten eingeschlossen sind. Die Algorithmen sind sehr schwer und zeitaufwändig zu implementieren. Wir brauchen einige gute Bibliotheken, so dass jedes Projekt einfach OT einbinden kann, wenn sie es brauchen.

Das ist von der Website von sharejs. Ein node.js basiert auf einem Server-Client, den Sie in Ihren bestehenden Client einbinden können.

OT ist auch in der Racer-Modell-Synchronisations-Engine für Node.js implementiert, die die Grundlage für Derby bildet. Im Moment bietet derby.js transparent es noch nicht, aber sie planen, auch von den Derby docs:

Derzeit Racer defaults alle Transaktionen in der Reihenfolge der Anwendung erhalten, das heißt in letzten schreiber gewinnt. (...) Racer [auch] unterstützt Konfliktlösung über eine Kombination von Software Transactional Memory (STM), Operational Transformation (OT) und Diff-Match-Patch-Techniken.

Diese Funktionen sind noch nicht vollständig implementiert, aber die Racer-Demos zeigen vorläufige Beispiele für STM und OT.

Zufälligerweise haben sowohl die Teams von sharejs als auch derbyjs einen ehemaligen Google-Waver an Bord. Meteor hat ein Ex Etherpad/Google Waver in ihrem Kernteam.Da ist Etherpad einer der bekanntesten Implementierungen von OT I Meteor vorstellen würde es sicher auch irgendwann unterstützen will ...


4

ich ein Meteor Smart-Paket erstellt habe, die ShareJS integriert:

https://github.com/mizzao/meteor-sharejs

es ist ganz richtig jetzt vorläufig, aber Sie können es in Ihre Anwendung importieren, in textarea s fallen, und es „einfach funktioniert“. Bitte versuchen Sie es aus und einige neue Features über Pull-Anfragen einreichen :)

prüfen eine Demo hier aus:

http://documents.meteor.com

+0

Link zur Demo ist tot. – qznc