Pergunta

Eu estou procurando uma biblioteca que permita-me para sincronizar texto em tempo real entre vários usuários (ala Google Docs).

Eu tropecei em Transformação Operacional, que parece se encaixar minhas necessidades. Dito isto, eu entendo a essência da OT, mas não a matemática nem implementação de OT.

Assim, eu queria saber se havia uma biblioteca Javascript drag'n'drop que ligar para uma área de texto, geram as transformações, então me permita aplicar essas transformações para outro cliente?

(eu comecei a fonte Etherpad, mas eu não posso fazer cara ou coroa de fora. Se alguém poderia apontar como alavancagem sobre a implementação OT do Etherpad, que vai ser ótimo também!)

Foi útil?

Solução

Eu acho que partes da implementação OT do Google Wave são Open Source (e mais partes estão chegando).

Eu não tenho certeza se é isso que você está procurando, mas uma alternativa para OT é Diferencial sincronização :

Outras dicas

Um dos engenheiros ex-Wave lançou uma implementação Coffeescript de seus colaborativas edição algoritmo chamado ShareJS, agora chamado ShareDB .

Vou resumir as soluções que eu encontrei.

  • Transformação Operacional:. Por exemplo

    • Google Wave OT. A abordagem é baseada na chamada abordagem Júpiter.
    • ShareJs. Com base no mesmo algoritmo OT como Google Wave OT.
    • COWEB-jsoe. Baseado no COT -. Uma abordagem OT muito sofisticado, que também suporta propagação mensagem p2p
    • OpenCoweb. Ele aproveita OpenCoweb-jsoe, a fim de fornecer uma estrutura completa para um monte de problemas semelhantes.
    • OT.js baseia-se a operação de tipos de ShareJs.
    • DriveSDK. A API muito interessante que pode fazer um monte de coisas - por exemplo, colaboração em gráficos.
    • SwellRT é um fork do Google Wave. É é federado e suportes de texto rico.
  • Sincronização Diferencial:

    • Diff-Match-Patch de Neil Fraser.
    • MobWrite utiliza o algoritmo Diff-Match-Patch.
  • CRDT (Commutative Tipo Replicated Data):

    • Há um monte de diferentes algoritmos CRDT que permitem a implementação de tipos compartilhados. Alguns CRDTs trabalho com a propagação de mensagens P2P, alguns se baseiam em modelos cliente-servidor
    • YJS permite compartilhar tipos de dados arbitrários (RichText, Array, Hash Maps, .. extensível). suporte offline e suporte para protocolos de comunicação P2P (existem módulos para XMPP, Websockets e WebRTC)
    • SwarmJS servidor do cliente de banco de dados compartilhado com suporte offline. Funciona bem com Reagir
    • Woot Uma implementação da Woot CRDT
    • CRDT Outra implementação CRDT
    • AutoMerge

OT Bibliotecas:

Dentro do projeto websocket HWIOS, eu usei com sucesso uma combinação de ambos (py-infinote no serverside, jinfinote em clientside) para os estados de documentos sincronização.

A biblioteca ot.js https://github.com/Operational-Transformation/ot.js pode ser útil para cenários de multi-usuário.

Turnkey, ou "arrastar e soltar" soluções para este problema já não existiu realmente devido à complexidade do estado mutável confiável de sincronização compartilhada. A resposta de dmonad é um ajuntamento decente, e eu postei uma visão mais up-to-date das soluções disponíveis aqui .

Esta questão é bastante antigo, mas Convergência (disclaimer: Eu sou um dos fundadores) fornece a solução mais turnkey lá fora , proporcionando não apenas a sincronização de dados, mas uma série de outras APIs úteis para a construção de um UX colaborativo. Aqui está um exemplo mostrando exatamente o que você pediu: sincronização de um campo de texto entre vários clientes.

Caso contrário, ShareDB é uma grande solução de código aberto que se encaixa um monte de necessidades das pessoas.

Também verificar esses Javascript Libraries:

Com um lib cliente js (Strophe.js) você poderia usar um servidor XMPP livre (como jabber.org), juntamente com o meu do lado do cliente OT lib (JSOTTEST) para construir um sistema cliente-servidor completa.

Vou enviar o src de um sistema de chat cliente-servidor de demonstração quando tenho tempo para revisar o código.

NPM tem algumas bibliotecas ot agradáveis ??para node.js:

  • https://npmjs.org/package/ot - adaptadores para CodeMirror e ace construído em bem como uma aplicação cliente e servidor
  • https://npmjs.org/package/changesets - plain utilizável biblioteca ot no nó e o navegador; permite-lhe 'changesets' Build (essencialmente diffs) que você pode enviar ao redor, transformar um contra o outro e aplicar sobre um documento

Você poderia falar com os rapazes no Cedanet . Embora Ceda é de código fechado e nenhum teste gratuito está disponível em seu web site. Tenho estado envolvido no desenvolvimento de Ceda e continuar a trabalhar com ele em projetos comerciais, então eu poderia ser capaz de fornecer algum feedback / conselhos se você cabeça para baixo este caminho.

I coisa etherpad.org com EtherPad lite é superior a outras soluções.

Estamos construindo um editor de colaborar que combina Transformação Operacional com versionamento. Dessa forma podemos apoiar tanto, offline e collab online. Nós lançamos nossa própria biblioteca OT ontem como parte de nossa pilha de código aberto.

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

Nós também contribuiu uma biblioteca de controle de versão.

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

Eu escrevi um pequeno UNIXy (fazer uma coisa e fazê-lo bem) biblioteca que implementa uma camada de controle de OT, permitindo que você conecte em diferentes tipos de OT (suporta todos os tipos shareJS compatíveis). É semelhante a shareJS mas menos opinativo e mais abstrato.

https://github.com/marcelklehr/gulf

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top