Faye vs. Socket.IO (dan Juggernaut)

102

Socket.IO tampaknya menjadi pustaka emulasi WebSocket yang paling populer dan aktif. Juggernaut menggunakannya untuk membuat sistem pub / sub lengkap.

Faye juga populer dan aktif, dan memiliki perpustakaan javascript sendiri, membuat fungsionalitas lengkapnya sebanding dengan Juggernaut. Juggernaut menggunakan node untuk servernya, dan Faye dapat menggunakan node atau rack. Juggernaut menggunakan Redis untuk ketekunan ( koreksi: menggunakan Redis untuk pub / sub), dan Faye hanya menyimpan status dalam memori.

  1. Apakah semuanya di atas akurat?
  2. Faye mengatakan itu mengimplementasikan Bayeux - saya pikir Juggernaut tidak melakukan ini - adalah karena Juggernaut adalah level yang lebih rendah (IE, saya dapat mengimplementasikan Bayeux menggunakan Juggernaut)
  3. Bisakah Faye beralih menggunakan pustaka javascript browser Socket.IO jika diinginkan? Atau apakah perpustakaan javascript mereka melakukan hal yang berbeda secara fundamental?
  4. Adakah perbedaan arsitektur / desain / filosofi lain di antara proyek-proyek tersebut?
John Bachir
sumber
3
Untuk berjaga-jaga, Juggernaut sudah tidak digunakan lagi! Baca alasan blog.alexmaccaw.com/killing-a-library .
Maziyar
Acara HTML 5 Server-Sent tampaknya menjadi alternatif yang direkomendasikan menurut penulis Juggernaut
Harindaka

Jawaban:

121

Pengungkapan: Saya penulis Faye.

  1. Mengenai Faye, semua yang Anda katakan itu benar.
  2. Faye mengimplementasikan sebagian besar Bayeux, satu-satunya hal yang hilang saat ini adalah saluran layanan, yang belum saya yakini kegunaannya. Secara khusus Faye dirancang agar kompatibel dengan implementasi referensi CometD dari Bayeux, yang memiliki pengaruh besar pada hal berikut.
  3. Secara konseptual, ya: Faye bisa menggunakan Socket.IO. Dalam praktiknya, ada beberapa hambatan untuk ini:
    • Saya tidak tahu apa jenis dukungan sisi server yang dibutuhkan Socket.IO, dan persyaratan bahwa klien Faye (ada klien sisi server di Node dan Ruby, ingat) dapat berbicara dengan server Bayeux mana pun (dan Faye server ke klien Bayeux mana pun) mungkin merupakan pemecah kesepakatan.
    • Bayeux memiliki persyaratan khusus bahwa server dan klien mendukung jenis transportasi tertentu, dan menjelaskan cara menegosiasikan mana yang akan digunakan. Ini juga menentukan bagaimana mereka digunakan, misalnya bagaimana Content-Type dari permintaan XHR mempengaruhi bagaimana isinya diinterpretasikan.
    • Untuk beberapa jenis penanganan kesalahan, saya memerlukan akses langsung ke pengangkutan, misalnya mengirim ulang pesan ketika klien tersambung kembali setelah Node WebSocket mati .
    • Harap perbaiki saya jika saya melakukan kesalahan ini - ini didasarkan pada pemindaian sepintas dokumentasi Socket.IO.
  4. Faye hanyalah pub / sub, ini hanya didasarkan pada protokol yang sedikit lebih kompleks dan memiliki banyak kenyamanan:
    • Ekstensi sisi server dan klien
    • Pencocokan pola karakter pengganti pada rute saluran
    • Sambungan ulang otomatis, misalnya saat WebSockets mati atau server offline
    • Klien bekerja di semua browser, di ponsel, dan sisi server di Node dan Ruby

Faye mungkin terlihat jauh lebih kompleks dibandingkan dengan Juggernaut karena Juggernaut lebih banyak mendelegasikan, misalnya mendelegasikan negosiasi transportasi ke Socket.IO dan perutean pesan ke Redis. Ini adalah keputusan yang bagus, tetapi keputusan saya untuk menggunakan Bayeux berarti saya harus melakukan lebih banyak pekerjaan sendiri.

Adapun filosofi desain, tujuan utama Faye adalah bahwa ia harus bekerja di mana pun Web tersedia dan harus benar-benar sepele untuk digunakan. Ini sangat sederhana untuk memulai tetapi ekstensibilitasnya berarti dapat disesuaikan dengan cara yang cukup kuat, misalnya Anda dapat mengubahnya menjadi layanan push server-ke-klien (yaitu menghentikan klien yang sewenang-wenang mendorongnya) dengan menambahkan ekstensi otentikasi .

Ada juga pekerjaan yang sedang dilakukan untuk membuatnya lebih fleksibel di sisi server. Saya ingin menambahkan dukungan pengelompokan, dan membuat mesin inti pub-sub dapat dicolokkan sehingga Anda dapat menggunakan Faye sebagai antarmuka web tanpa negara untuk sistem pub-sub lain seperti Redis atau AMQP.

Saya harap ini membantu.

jcoglan.dll
sumber
1
Terima kasih atas jawaban yang bagus. Saya tidak menyadari fleksibilitas protokol Bayeux - jadi klien sewenang-wenang harus dapat berbicara dengan sembarang / banyak server? Apakah Anda mengetahui adanya proyek atau layanan produksi yang memanfaatkan sepenuhnya ini?
John Bachir
4
Saya baru saja pindah dari Socket.IO ke Faye, dan saya harus mengatakan bahwa Faye menyimpan lamaran saya. Dengan server Faye sederhana dan server menengah, aplikasi saya dapat menangani 6000 pengguna secara bersamaan menurut analisis google
Tan Nguyen
13
  1. AFAIK, ya, terlepas dari fakta Juggernaut hanya menggunakan Redis untuk Pubsub, bukan ketekunan. Juga berarti pustaka klien dalam sebagian besar bahasa telah ditulis (karena ini hanya membutuhkan adaptor Redis).
  2. Juggernaut tidak mengimplementasikan Bayeux, tetapi memiliki protokol JSON khusus yang sangat sederhana
  3. Entahlah, mungkin
  4. Juggernaut sangat sederhana, dan dirancang seperti itu. Meskipun saya belum pernah menggunakan Faye, dari dokumen sepertinya Faye memiliki lebih banyak fitur daripada hanya PubSub. Dibangun di atas Socket.IO juga memiliki kelebihan, Juggernaut didukung di hampir semua browser, baik desktop maupun seluler.

Saya akan sangat tertarik dengan apa yang penulis Faye katakan. Seperti yang saya katakan, saya belum pernah menggunakannya dan alangkah baiknya mengetahui perbandingannya dengan Juggernaut. Ini mungkin kasus menggunakan alat terbaik untuk pekerjaan itu. Jika pubsub yang Anda butuhkan, Juggernaut melakukannya dengan sangat baik.

Alex MacCaw
sumber
Terima kasih atas jawaban yang bagus. Saya tidak menyadari bahwa Redis hanya digunakan untuk fitur pub / sub-nya. Membuat saya menanyakan ini: stackoverflow.com/questions/4938520
John Bachir