Operasyonel Dönüşüm kütüphanesi?


103

Birden çok kullanıcı arasında gerçek zamanlı olarak metin senkronize etmeme izin verecek bir kitaplık arıyorum (ala Google Dokümanlar).

İhtiyaçlarıma uygun görünen Operasyonel Dönüşüm ile karşılaştım. Bunu söyledikten sonra, OT'nin özünü anlıyorum, ancak OT'nin matematiğini veya uygulamasını anlamıyorum.

Bu nedenle, bir metin alanına bağlanacak, dönüşümleri oluşturacak ve sonra bu dönüşümleri başka bir istemciye uygulamama izin verecek bir drag'n'drop Javascript kütüphanesi olup olmadığını merak ediyordum.

(Etherpad kaynağını aldım, ancak bununla ilgili bilgi alamıyorum. Herhangi biri Etherpad'in OT uygulamasından nasıl yararlanılacağını gösterebilirse, bu da harika olur!)


Firebase tarafından desteklenen ve Firepad adlı işbirlikçi metin düzenleyici - firepad.io Biraz ilham almak için kodu kontrol edin github.com/FirebaseExtended/firepad
Tharanga Hewavithana

Yanıtlar:


57

Google Wave'in OT uygulamasının bazı kısımlarının Açık Kaynak olduğunu düşünüyorum (ve daha fazla parça geliyor).

Aradığınız şeyin bu olup olmadığından emin değilim, ancak OT'ye bir alternatif Diferansiyel Senkronizasyondur :


6
Diff-Match-Patch, Neil Frasier ( neil.fraser.name/writing/sync ) tarafından yazılan Diferansiyel Senkronizasyon makalesi ile birleştirildiğinde hile yaptı! Beni doğru yöne yönlendirdiğiniz için çok teşekkürler.
gamers2000

Anladığım kadarıyla, Diff-Match-Patch ve uzantı ile MobWrite (ikincisi birinciyi kullandığı için) ikili değişiklikleri değil, yalnızca metni destekliyor. Ancak, HTML form öğeleriyle yalnızca düz metni desteklemediğini gösteren bir işbirliği demosu vardır.
gamers2000

Bu yanıttan sonra "ve daha fazla parça geliyor" hakkında herhangi bir iyi haber var mı?
bertie

3
Aslında, Google-Diff-Match-Patch, DS'nin Neil Fraser belgesini okuyabileceğiniz farklılıkları anlamak için Diferansiyel Senkronizasyon olan Operasyonel Dönüşümlere alternatif yöntemi uygulamayı amaçlamaktadır: neil.fraser.name/writing/sync (OT bu belgede Olay geçişi olarak anılmaktadır). Çok farklı iki yöntemdir.
Benja

5
bu eski, ama sakıncası varsa, github.com/benjamine/JsonDiffPatch'i açtım , uzun dizeler için Neil'in Diff-Match-Patch'i kullanıyor, ancak rasgele js nesne grafikleri için çalışıyor
Benja,

44

Eski Wave mühendislerinden biri, artık ShareDB olarak adlandırılan ShareJS adlı işbirliğine dayalı düzenleme algoritmasının bir Coffeescript uygulamasını yayınladı .


1
ShareJS, MobWrite'ın Google'ın Diff and Patch ile yaptıklarından muhtemelen daha basit ve daha iyi belgelenmiş ve daha yeniden kullanılabilir.
Luke Stanley

36

Bulduğum çözümleri özetleyeceğim.

  • Operasyonel Dönüşüm: Örn.

    • Google Wave OT. Yaklaşım sözde Jüpiter yaklaşımına dayanmaktadır.
    • ShareJs. Google Wave OT ile aynı OT algoritmasına dayanmaktadır.
    • Coweb-jsoe. P2p mesaj yayılımını da destekleyen çok sofistike bir OT yaklaşımı olan COT'ye dayanmaktadır.
    • OpenCoweb. Pek çok benzer sorun için tam teşekküllü bir Çerçeve sağlamak için OpenCoweb-jsoe'den yararlanır.
    • OT.js, ShareJ'lerin işlem türlerine dayanır.
    • DriveSDK. Pek çok şey yapabilen çok ilginç bir API - örneğin, grafikler üzerinde işbirliği.
    • SwellRT bir Çatal Apache Wave'dir. Federasyondur ve zengin metni destekler.
  • Diferansiyel Senkronizasyon:

    • Neil Fraser'dan Diff-Match-Patch.
    • MobWrite, Diff-Match-Patch algoritmasını kullanır.
  • CRDT (Değişmeli Çoğaltılmış Veri Türü):

    • Paylaşılan türlerin uygulanmasına izin veren birçok farklı CRDT algoritması vardır. Bazı CRDT'ler P2P mesaj yayılımıyla çalışır, bazıları ise istemci-sunucu modellerine dayanır
    • Yjs , rastgele veri türlerini (RichText, Array, Karma Haritaları, .. genişletilebilir) paylaşmanıza izin verir. P2P iletişim protokolleri için çevrimdışı destek ve destek (XMPP, Websockets ve WebRTC için modüller vardır)
    • Çevrimdışı destekli SwarmJS İstemci sunucusu paylaşılan veritabanı. React ile iyi çalışıyor
    • Woot Woot CRDT'nin bir uygulaması
    • CRDT Başka bir CRDT uygulaması
    • Automerge

Google Drive API, DS'yi değil OT'yi kullanır. developer.google.com/drive/realtime/conflict-resolution
Mathias Bak




4

Bu soruna anahtar teslimi veya "sürükle ve bırak" çözümleri, paylaşılan değişken durumu güvenilir bir şekilde senkronize etmenin karmaşıklığı nedeniyle gerçekten mevcut değildi. dmonad'ın yanıtı iyi bir özet ve burada mevcut çözümlere daha güncel bir genel bakış gönderdim .

Bu soru oldukça eskidir, ancak Convergence (sorumluluk reddi: Ben bir kurucuyum), yalnızca veri senkronizasyonu sağlamakla kalmayıp, aynı zamanda işbirliğine dayalı bir UX oluşturmak için yararlı olan diğer API'leri de sağlayarak piyasadaki en anahtar teslimi çözümü sağlar. İşte tam olarak ne istediğinizi gösteren bir örnek : bir metin alanının birden çok istemcide senkronizasyonu.

Aksi takdirde, ShareDB birçok insanın ihtiyacına uyan harika bir açık kaynaklı çözümdür.



2

Bir js istemci lib (Strophe.js) ile, tam bir istemci-sunucu sistemi oluşturmak için istemci tarafı OT lib (JSOTTEST) ile birlikte ücretsiz bir XMPP sunucusu (jabber.org gibi) kullanabilirsiniz.

Kodu revize etmek için zamanım olduğunda, bir demo istemci-sunucu sohbet sisteminin src'sini göndereceğim.


1
Neredeyse iki yıl önce "Bir demonun src'sini sunacağım ..." yazdınız. O demoyu hiç bitirdin mi?
Bryan Oakley

Üzgünüm ... ama halka açık bir demo yayınlayacak vaktim olmadı! Ancak php için Bosh lib kullanmak çok basit !! güle güle
user981836

2

Npm, node.js için bazı güzel ot kitaplıklarına sahiptir:

  • https://npmjs.org/package/ot - yerleşik codemirror ve ace için adaptörler, ayrıca bir istemci ve sunucu uygulaması
  • https://npmjs.org/package/changesets - düğümde ve tarayıcıda kullanılabilen düz kitaplık; etrafa gönderebileceğiniz, birbirinize karşı dönüştürebileceğiniz ve bir belgeye uygulayabileceğiniz 'değişiklik kümeleri' (esasen farklar) oluşturmanıza olanak sağlar

1

Cedanet'teki adamlarla konuşabilirsin . Ceda kapalı kaynak olmasına ve web sitelerinde ücretsiz deneme yapılmamasına rağmen. Ceda'nın geliştirilmesine dahil oldum ve ticari projelerde onunla çalışmaya devam ediyorum, bu yüzden bu yolda ilerlerseniz size bazı geri bildirim / tavsiyeler verebilirim.


1

Etherpad lite ile etherpad.org'un diğer çözümlerden üstün olduğunu düşünüyorum.


1
Bir örnekle etherpad'in üstünlüğünü kanıtlayabilir misiniz?
DL Narasimhan


1

Bir OT kontrol katmanı uygulayan küçük bir unixy (bir şey yapın ve bunu iyi yapın) kitaplığı yazdım, farklı OT türlerini takmanıza izin verir (tüm shareJS uyumlu türleri destekler). Share JS'ye benzer, ancak daha az düşünceli ve daha soyut.

https://github.com/marcelklehr/gulf

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.