Faye vs Socket.IO (ve Juggernaut)


102

Socket.IO , en popüler ve aktif WebSocket öykünme kitaplığı gibi görünüyor.Juggernaut , bunu eksiksiz bir pub / sub sistemi oluşturmak için kullanır.

Faye aynı zamanda popüler ve aktiftir ve kendi javascript kitaplığına sahiptir, bu da tam işlevselliğini Juggernaut ile karşılaştırılabilir hale getirir. Juggernaut, sunucusu için düğüm kullanır ve Faye, düğümü veya rafı kullanabilir. Juggernaut, kalıcılık için Redis'i kullanır ( düzeltme: pub / sub için Redis kullanır) ve Faye, durumu yalnızca bellekte tutar.

  1. Yukarıdaki her şey doğru mu?
  2. Faye onu uygular diyor Bayeux i Juggernaut bu yapmaz düşünüyorum - - Juggernaut düşük düzeyde olduğu için (IE, ben Bayeux Juggernaut kullanarak uygulayabilirsiniz) olmasıdır
  3. Faye isterse Socket.IO tarayıcı javascript kitaplığını kullanmaya geçebilir mi? Veya javascript kitaplıkları temelde farklı şeyler mi yapıyor?
  4. Projeler arasında başka mimari / tasarım / felsefe farklılıkları var mı?

3
Her ihtimale karşı, Juggernaut kullanımdan kaldırıldı! Neden blog.alexmaccaw.com/killing-a-library'yi okuyun .
Maziyar

Juggernaut yazarına göre HTML 5 Server-Sent etkinlikleri önerilen alternatif gibi görünüyor
Harindaka

Yanıtlar:


121

Açıklama: Faye'in yazarıyım.

  1. Faye ile ilgili olarak, söylediğin her şey doğru.
  2. Faye, Bayeux'un çoğunu uyguluyor, şu anda eksik olan tek şey hizmet kanalları ve bunların kullanışlılığına henüz ikna olmadım. Özellikle Faye, aşağıdakiler üzerinde büyük etkisi olan Bayeux'un CometD referans uygulamasıyla uyumlu olacak şekilde tasarlanmıştır.
  3. Kavramsal olarak evet: Faye yapabilirdi Socket.IO kullanın. Pratikte bunun önünde bazı engeller vardır:
    • Socket.IO'nun ne tür bir sunucu tarafı desteği gerektirdiği konusunda hiçbir fikrim yok ve Faye istemcisinin (Node ve Ruby'de sunucu tarafı istemciler var, unutmayın) herhangi bir Bayeux sunucusuyla (ve Faye herhangi bir Bayeux istemcisine sunucu) anlaşma bozucu olabilir.
    • Bayeux, sunucuların ve istemcilerin belirli taşıma türlerini desteklemesine yönelik özel gereksinimlere sahiptir ve hangisinin kullanılacağı konusunda nasıl pazarlık yapılacağını söyler. Ayrıca nasıl kullanıldıklarını, örneğin bir XHR isteğinin İçerik Türünün içeriğinin nasıl yorumlandığını nasıl etkilediğini de belirtir.
    • Bazı hata işleme türleri için aktarıma doğrudan erişime ihtiyacım var, örneğin bir Node WebSocket öldükten sonra bir istemci yeniden bağlandığında mesajları yeniden göndermek .
    • Bunlardan herhangi birini yanlış anlarsam lütfen düzeltin - bu, Socket.IO belgelerinin üstünkörü taramasına dayanmaktadır.
  4. Faye sadece pub / sub, sadece biraz daha karmaşık bir protokole dayanıyor ve birçok özelliği var:
    • Sunucu ve istemci tarafı uzantıları
    • Kanal rotalarında joker karakter kalıbı eşleşmesi
    • Otomatik yeniden bağlanma, örneğin WebSockets öldüğünde veya sunucu çevrimdışı olduğunda
    • İstemci tüm tarayıcılarda, telefonlarda ve Node ve Ruby'de sunucu tarafında çalışır

Faye muhtemelen Juggernaut ile karşılaştırıldığında çok daha karmaşık görünüyor çünkü Juggernaut daha fazla yetkilendiriyor, örneğin ulaşım görüşmelerini Socket.IO'ya ve mesaj yönlendirmeyi Redis'e devrediyor. Bunların ikisi de güzel kararlar, ancak benim Bayeux'u kullanma kararım, kendim daha fazla iş yapmam gerektiği anlamına geliyor.

Tasarım felsefesine gelince, Faye'in öncelikli hedefi, Web'in mevcut olduğu her yerde çalışması ve devam etmenin kesinlikle önemsiz olması gerektiğidir. Başlamak gerçekten çok basit, ancak genişletilebilirliği, oldukça güçlü şekillerde özelleştirilebileceği anlamına geliyor, örneğin, kimlik doğrulama uzantıları ekleyerek onu bir sunucudan istemciye itme hizmetine dönüştürebilirsiniz (yani keyfi istemcilerin ona zorlamasını durdurabilirsiniz) .

Sunucu tarafında daha esnek hale getirilmesi için çalışmalar da devam ediyor. Kümeleme desteği eklemeyi ve çekirdek pub-sub motorunu takılabilir hale getirmeyi düşünüyorum, böylece Faye'yi Redis veya AMQP gibi başka bir pub-sub sistemi için durumsuz bir web ön ucu olarak kullanabilirsiniz.

Umarım bu yardımcı olmuştur.


1
Harika bir cevap için teşekkürler. Bayeux protokolünün esnekliğini fark etmedim - yani keyfi bir istemci, keyfi / çoklu sunucularla konuşabilmeli mi? Bundan tam olarak yararlanan herhangi bir proje veya üretim hizmeti biliyor musunuz?
John Bachir

4
Geçenlerde Socket.IO'dan Faye'e taşındım ve Faye'nin başvurumu kaydettiğini söylemeliyim. Basit bir Faye sunucusu ve orta bir sunucu ile, uygulamam google analytics'e göre aynı anda 6000 kullanıcıyı idare edebiliyor
Tan Nguyen

13
  1. AFAIK, evet, Juggernaut'un sebat değil, Pubsub için sadece Redis kullanması dışında. Ayrıca, çoğu dildeki istemci kitaplıklarının zaten yazıldığı anlamına gelir (çünkü yalnızca bir Redis adaptörüne ihtiyaç duyar).
  2. Juggernaut, Bayeux'u uygulamaz, bunun yerine çok basit bir özel JSON protokolüne sahiptir.
  3. Dunno, muhtemelen
  4. Juggernaut çok basit ve bu şekilde tasarlandı. Faye'i kullanmamış olsam da, dokümandan bakıldığında PubSub'dan çok daha fazla özelliğe sahip gibi görünüyor. Socket.IO'nun üzerine inşa edilmesinin avantajları da vardır, Juggernaut hem masaüstü hem de mobil olmak üzere neredeyse her tarayıcıda desteklenir.

Faye'nin yazarının söylediği şeyle gerçekten ilgileneceğim. Dediğim gibi, kullanmadım ve Juggernaut ile karşılaştırıldığında nasıl olduğunu bilmek harika olur. Muhtemelen iş için en iyi aracı kullanmak durumudur. Eğer ihtiyacınız olan pubsub ise, Juggernaut bunu çok iyi yapıyor.


Harika bir cevap için teşekkürler. Redis'in yalnızca pub / sub özellikleri için kullanıldığını fark etmemiştim. Bunu sormamı
sağladı

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.