Domanda

Sto cercando una libreria che mi permetta di sincronizzare il testo in tempo reale tra più utenti (ala Google Docs).

Mi sono imbattuto in Trasformazione Operativa, che sembra soddisfare le mie esigenze.Detto questo, capisco l’essenza di OT, ma non i calcoli né l’implementazione di OT.

Pertanto, mi chiedevo se esistesse una libreria Javascript drag'n'drop che si agganciasse a un'area di testo, generasse le trasformazioni e quindi mi permettesse di applicare tali trasformazioni su un altro client?

(Ho ottenuto il sorgente Etherpad, ma non riesco a capirne niente.Se qualcuno potesse indicare come sfruttare l'implementazione OT di Etherpad, sarebbe fantastico!)

È stato utile?

Soluzione

Credo che le parti di implementazione OT di Google Wave sono Open Source (e più parti sono più prossimi).

Non sono sicuro se questo è quello che stai cercando, ma in alternativa al OT è differenziale Sincronizzazione :

Altri suggerimenti

Uno degli ingegneri ex-Wave ha rilasciato un'applicazione CoffeeScript del suo algoritmo di editing collaborativo chiamato ShareJS, ora denominata ShareDB .

cercherò di riassumere le soluzioni che ho trovato.

  • trasformazione operativa:. Per esempio

    • Google Wave OT. L'approccio si basa sul cosiddetto approccio Giove.
    • ShareJs. Basato sullo stesso algoritmo di OT come Google Wave OT.
    • COWEB-jsoe. Sulla base di COT -. Un sofisticato approccio OT che supporta anche un messaggio p2p propagazione
    • OpenCoweb. Sfrutta OpenCoweb-jsoe al fine di fornire un quadro a tutti gli effetti per un sacco di problemi simili.
    • OT.js si basa sul funzionamento-tipi di ShareJs.
    • DriveSDK. Una molto interessante API che può fare un sacco di cose - per esempio collaborazione su grafici.
    • SwellRT è un fork di Google Wave. E 'è federata, e supporta il testo ricco.
  • Sincronizzazione Differenziale:

    • Diff-Match-Patch da Neil Fraser.
    • MobWrite sfrutta l'algoritmo Diff-Match-Patch.
  • CRDT (commutativa Tipo dati replicati):

    • Ci sono un sacco di diversi algoritmi CRDT che consentono la realizzazione di tipi condivisi. Alcuni CRDTs lavorano con il messaggio P2P propagazione, alcuni si basano su modelli client-server
    • YJS permette di condividere i tipi di dati arbitrari (RTF, Array, mappe Hash, .. estensibile). supporto offline e il supporto per i protocolli di comunicazione P2P (vi sono moduli per XMPP, WebSockets, e WebRTC)
    • SwarmJS client server di database condiviso con supporto offline. Funziona bene con Reagire
    • Woot Un'implementazione del Woot CRDT
    • CRDT Un'altra implementazione CRDT
    • Automerge

OT Biblioteche:

Nell'ambito del progetto websocket HWIOS, ho usato con successo una combinazione di entrambi (PY-infinote al serverside, jinfinote a lato client) per sincronizzare documento afferma.

La biblioteca https://github.com/Operational-Transformation/ot.js possono essere utili per gli scenari multi-utente.

Le soluzioni chiavi in ​​mano o "trascinamento della selezione" a questo problema non sono realmente esistite a causa della complessità della sincronizzazione affidabile dello stato mutabile condiviso.La risposta di dmonad è una raccolta decente e ho pubblicato una panoramica più aggiornata delle soluzioni disponibili Qui.

Questa domanda è piuttosto vecchia, ma Convergenza (disclaimer:Sono un fondatore) fornisce la soluzione più chiavi in ​​mano disponibile, fornendo non solo la sincronizzazione dei dati ma una serie di altre API utili per creare una UX collaborativa. Ecco un esempio mostrando esattamente ciò che hai richiesto:sincronizzazione di un campo di testo su più client.

Altrimenti, Condividi DB è un'ottima soluzione open source che si adatta alle esigenze di molte persone.

Verificate anche questi Javascript Libraries:

Con un lib cliente js (Strophe.js) si potrebbe utilizzare un server XMPP libero (come jabber.org) insieme con la mia sul lato client OT lib (JSOTTEST) per costruire un sistema client-server completa.

I sottoporrò lo src di un sistema di chat client-server demo quando ho tempo di rivedere il codice.

Npm ha alcune librerie OT per node.js:

  • https://npmjs.org/package/ot - adattatori per CodeMirror e costruito in asso così come un'implementazione client e server
  • https://npmjs.org/package/changesets - pianura biblioteca ot utilizzabile in nodo e il browser; permette di costruire 'di modifiche' (diff essenzialmente) che è possibile inviare in giro, trasformare uno contro l'altro e si applica su un documento

Si potrebbe parlare con i ragazzi di Cedanet . Anche se Ceda è closed source e nessuna prova gratuita è disponibile sul loro sito web. Sono stato coinvolto nello sviluppo di Ceda e continuare a lavorare con lui in progetti commerciali, quindi potrei essere in grado di fornire un feedback / consigli se si testa su questa strada.

I cosa etherpad.org con Etherpad lite è superiore ad altre soluzioni.

Stiamo costruendo un editor Collaborare che combina trasformazione operativa con il controllo delle versioni. In questo modo siamo in grado di supportare sia, offline e collab on-line. Abbiamo pubblicato la nostra libreria di OT ieri come parte del nostro stack open source.

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

Abbiamo anche contribuito una libreria per il controllo delle versioni.

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

Ho scritto un piccolo Unixy (fare una cosa e farla bene) libreria che implementa un livello di controllo OT, che consente di collegare diversi tipi di OT (supporta tutti i tipi di shareJS compliant). E 'simile a shareJS ma meno supponente e più astratto.

https://github.com/marcelklehr/gulf

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top