2012-08-14 11 views
7

Guardare in Meteora per creare un'app per la modifica di documenti collaborativi, perché è fantastico che Meteor sincronizzi i dati tra più client per impostazione predefinita.Sincronizzazione stile Etherpad in Meteor?

Ma quando si utilizza un testo-zona, come nell'esempio di Sameer Kalburgi
http://www.skalb.com/2012/04/16/creating-a-document-sharing-site-with-meteor-js/
http://docshare-tutorial.meteor.com/
l'esperienza è sub-ottimale.

Ho provato a digitare contemporaneamente con un collega e le mie modifiche sarebbero state sovrascritte quando ha digitato e viceversa. Quindi nella risoluzione del conflitto non c'è ancora un algoritmo di fusione, penso?

È previsto per la funzione? Ci sono modi per implementarlo al momento? Etherpad sembra gestire questo problema piuttosto bene. Avere questo in Meteor renderebbe la creazione di applicazioni di modifica dei documenti collaborative più accessibili.

risposta

0

Quello che descrivi sembra fuori dall'ambito Meteore per me. Non è uno strumento per impostare le possibilità di collaborazione!

Ciò che fornisce è un modo per lavorare in modo trasparente contro un sottoinsieme di un database di server. Ma l'implementazione della funzionalità di fusione specifica del caso d'uso è il lavoro dell'applicazione, non il framework.

+1

IMHO il punto centrale di questo tipo di applicazioni è non solo che i clienti sincronizzare il server in modo trasparente, ma in questo modo tutti gli utenti connessi si sincronizzano tra loro. Se questo non è impostato per le possibilità di collaborazione, non so cosa sia! –

+1

E poiché la risoluzione dei conflitti è stata incorporata in Meteor, non sembra una domanda così strana chiedere se può essere più sofisticata. Ma naturalmente, se conosci un buon modo, posso agguantare il meccanismo di risoluzione dei conflitti che mi piacerebbe conoscere. –

+1

Ok, la mia formulazione potrebbe essere stata un po 'spenta. Ciò che intendevo è che Meteor ovviamente supporta scenari di collaborazione, ma non è esplicitamente orientato verso di esso. Quindi devi aspettarti alcuni spigoli qua e là. Cosa intendi per "la risoluzione dei conflitti è integrata"? Tutto ciò che ho potuto trovare in quella direzione nei documenti è che negli scenari di conflitto vince sempre la prima sottoscrizione lato client. –

8

Così ho guardato dentro un po 'di più, l'algoritmo utilizzato in Etherpad è noto come trasformazione operativa:

La soluzione è la trasformazione operativa (OT). Se non ne hai sentito parlare, OT è una classe di algoritmi che eseguono la concorrenza in tempo reale su più siti. OT è come un git in tempo reale. Funziona con qualsiasi quantità di lag (da zero a una vacanza estesa). Permette agli utenti di apportare modifiche live e simultanee con bassa larghezza di banda. OT ti garantisce la coerenza finale tra più utenti senza tentativi, senza errori e senza che nessun dato venga sovrascritto.

Sfortunatamente, l'implementazione di OT fa schifo. C'è un milione di algoritmi con diversi compromessi, per lo più intrappolati in articoli accademici. Gli algoritmi sono davvero difficili e richiedono molto tempo per essere implementati correttamente. Abbiamo bisogno di alcune buone librerie, quindi qualsiasi progetto può semplicemente collegare OT se ne ha bisogno.

Questo è dal sito di sharejs. Un nodo client basato su un server-client che puoi collegare al tuo client esistente.

OT è implementato anche nel motore di sincronizzazione del modello Racer per Node.js, che costituisce il supporto per Derby. Al momento, derby.js non trasparente fornisce ancora, ma hanno in programma anche dalla Derby docs:

Attualmente, Racer default è l'applicazione di tutte le transazioni in ordine ricevuto, cioè ultime-writer-wins. (...) Racer [anche] supporta la risoluzione dei conflitti tramite una combinazione di tecniche Transactional Memory (STM), Operational Transformation (OT) e Diff-match-patch.

Queste funzioni non sono ancora completamente implementate, ma le demo di Racer mostrano esempi preliminari di STM e OT.

Per coincidenza, entrambi i team di sharejs e di derbyjs hanno un ex navigatore di Google a bordo. Meteor ha un ex etherpad/Google Waver nel proprio team principale.Dal momento che Etherpad è una delle implementazioni più noti di OT stavo immaginando Meteor sarebbe sicuramente voglia di sostenerlo ad un certo punto così ...


4

ho creato un pacchetto intelligente Meteor che integra ShareJS:

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

e 'abbastanza preliminare in questo momento, ma è possibile importare nella tua app, cadere in textarea s, ed è "solo funziona". Si prega di provare e presentare alcune nuove funzionalità tramite richieste di pull :)

Scopri una demo qui:

http://documents.meteor.com

+0

Il collegamento alla demo è morto. – qznc