Estou procurando uma biblioteca que me permita sincronizar texto em tempo real entre vários usuários (ala Google Docs).
Eu tropecei na Transformação Operacional, que parece se adequar às minhas necessidades. Dito isso, eu entendo a essência do OT, mas não a matemática nem a implementação do OT.
Portanto, eu queria saber se existe uma biblioteca Javascript drag'n'drop que se conecte a uma área de texto, gere as transformações e, em seguida, me permita aplicar essas transformações em outro cliente.
(Eu consegui a fonte do Etherpad, mas não consigo fazer cara ou coroa com isso. Se alguém pudesse apontar como aproveitar a implementação OT do Etherpad, isso também seria ótimo!)
transform
etherpad
operational
gamers2000
fonte
fonte
Respostas:
Acho que partes da implementação de OT do Google Wave são Open Source (e mais partes estão chegando).
Não tenho certeza se é isso que você está procurando, mas uma alternativa para OT é a sincronização diferencial :
fonte
Um dos ex-engenheiros do Wave lançou uma implementação Coffeescript de seu algoritmo de edição colaborativa chamado ShareJS, agora chamado ShareDB .
fonte
Vou resumir as soluções que encontrei.
Transformação operacional: Ex.
Sincronização diferencial:
CRDT (tipo de dados replicados comutativos):
fonte
Bibliotecas OT:
Dentro do projeto de websocket HWIOS, usei com sucesso uma combinação de ambos (py-infinote no lado do servidor, jinfinote no lado do cliente) para sincronizar os estados do documento.
fonte
A biblioteca ot.js https://github.com/Operational-Transformation/ot.js pode ser útil para cenários multiusuário.
fonte
https://github.com/opencoweb/coweb
fonte
Soluções turnkey ou "arrastar e soltar" para esse problema não existiam de fato devido à complexidade de sincronizar de forma confiável o estado mutável compartilhado. A resposta do dmonad é um resumo decente, e postei uma visão geral mais atualizada das soluções disponíveis aqui .
Esta questão é bastante antiga, mas Convergence (isenção de responsabilidade: eu sou um fundador) fornece a solução mais pronta para uso, fornecendo não apenas a sincronização de dados, mas uma série de outras APIs úteis para construir uma UX colaborativa. Aqui está um exemplo que mostra exatamente o que você solicitou: sincronização de um campo de texto em vários clientes.
Caso contrário, o ShareDB é uma ótima solução de código aberto que se adapta às necessidades de muitas pessoas.
fonte
Verifique também estas Bibliotecas Javascript:
fonte
Com uma lib de cliente js (Strophe.js), você pode usar um servidor XMPP gratuito (como jabber.org) junto com minha lib OT do lado do cliente (JSOTTEST) para construir um sistema cliente-servidor completo.
Enviarei o src de um sistema de bate-papo cliente-servidor de demonstração quando tiver tempo para revisar o código.
fonte
O Npm tem algumas ótimas bibliotecas para node.js:
fonte
Você poderia falar com o pessoal da Cedanet . Embora Ceda seja um código fechado e nenhum teste gratuito esteja disponível em seu site. Estive envolvido no desenvolvimento do Ceda e continuo a trabalhar com ele em projetos comerciais, então posso fornecer algum feedback / conselho se você seguir esse caminho.
fonte
Acho que etherpad.org com etherpad lite é superior a outras soluções.
fonte
Estamos construindo um editor colaborativo que combina Transformação Operacional com controle de versão. Dessa forma, podemos oferecer suporte a colaboração offline e online. Lançamos nossa própria biblioteca OT ontem como parte de nossa pilha de código aberto.
http://interior.substance.io/modules/operator.html
Também contribuímos com uma biblioteca para controle de versão.
http://interior.substance.io/modules/chronicle.html
fonte
Eu escrevi uma pequena biblioteca unixy (faça uma coisa e faça bem) que implementa uma camada de controle OT, permitindo que você conecte diferentes tipos de OT (suporta todos os tipos compatíveis com shareJS). É semelhante ao shareJS, mas menos opinativo e mais abstrato.
https://github.com/marcelklehr/gulf
fonte