Xmpp Vs Websocket [ditutup]

88

Saya akan mengembangkan situs web yang hampir memiliki obrolan waktu nyata. Saya tahu bahwa itu dapat diimplementasikan menggunakan protokol xmpp atau websocket. Saya tahu juga bahwa protokol xmpp telah dikembangkan pada tahun 1999, dan saya rasa protokol ini sudah matang saat ini. Di sisi lain, protokol websocket telah dikembangkan pada tahun 2011.

  1. Apa kebutuhan websocket jika xmpp bagus dalam menangani percakapan waktu nyata?
  2. Apa perbedaan utama antara 2 protokol tersebut?
  3. Dan kapan saya harus memilih salah satu dari mereka?
Khafaga
sumber
1
Saya baru-baru ini menemukan masalah yang sama, jawaban saya adalah mencari WebSockets. Node.JS menjadi bahasa yang sangat populer, dan memang seharusnya begitu. XMPP baik-baik saja - namun menurut saya Anda membatasi diri Anda sendiri untuk bergerak maju dengan memutuskan untuk menggunakan teknologi yang lebih lama ini. Node bagaimanapun adalah binatang yang rumit dan Anda harus mendekatinya secara berbeda dengan cara Anda menggunakan JavaScript. Jika Anda cukup sabar, saya sarankan untuk menggunakan Node - tidak hanya untuk ini, tetapi ini akan memungkinkan Anda untuk memperluas di area lain dengan lebih mudah.
JustSteveKing
7
XMPP adalah Protokol Perpesanan dan Kehadiran yang Dapat Diperluas, Websocket adalah protokol yang menyediakan komunikasi dupleks penuh melalui Port 80. Anda membandingkan Apel dengan Jeruk.
Aliran
17
@ Aliran: Saya mungkin membandingkan apel dengan jeruk menurut pendapat Anda. Tapi yang saya tanyakan adalah mana yang harus saya pilih saat mengembangkan situs web yang menyediakan kemampuan obrolan waktu nyata.
Khafaga
1
@JustSteveKing Kebanyakan hal telah dilakukan di XMPP namun Anda harus mengaturnya di node.js. Ini sama dengan menciptakan kembali roda.
Shahid Karimi

Jawaban:

133

Jawaban singkatnya adalah 'keduanya'.

XMPP adalah seperangkat protokol aplikasi untuk melakukan obrolan waktu nyata (dan banyak hal lainnya, dalam hal ini) - ia kemudian harus dipindahkan ke seluruh jaringan, jadi Anda memerlukan pengikatan transportasi. Ada tiga binding transport utama untuk XMPP -

  1. TCP / IP, yang biasanya digunakan seseorang di Internet dengan klien asli di perangkat
  2. HTTP (disebut BOSH), yang biasanya digunakan seseorang saat menggunakan XMPP di browser (karena TCP-IP tidak tersedia untuk aplikasi Javascript di browser)
  3. Websockets, yang digunakan saat melakukan XMPP di browser modern.

Jadi jika Anda mengembangkan aplikasi obrolan di browser, Anda akan memilih XMPP sebagai protokol aplikasi dan Anda akan menggunakan websockets (di browser modern) atau BOSH (di browser lama) sebagai transportasi jaringan. Jika Anda menggunakan pustaka XMPP untuk Javascript seperti Stanza.io ( https://github.com/otalk/stanza.io ), ini akan mendukung keduanya dan Anda hanya akan memikirkan 'XMPP' daripada lapisan transport, selain saat penyiapan, Anda harus memberitahukannya titik akhir apa yang harus disambungkan.

(Anda tidak dapat menggunakan 'hanya websockets' untuk mengobrol - Anda dapat menggunakan websockets tanpa XMPP, tetapi yang sebenarnya berarti bahwa Anda menciptakan protokol lapisan aplikasi Anda sendiri untuk mengobrol, dan kemungkinan besar Anda akan menghemat banyak waktu dan sakit kepala dengan memanfaatkan pekerjaan yang sudah ditulis dengan properti yang berguna (keamanan, identitas, ekstensibilitas, dll.) dan untuk itu ada perpustakaan dan server yang ada dengan menggunakan XMPP sebagai gantinya.)

Kev
sumber
1
Hai maaf, pertanyaannya sudah lama, saya hanya bertanya-tanya, jadi artinya transpor binding seperti socket.io/strophe.js, dan xmpp seperti (openfire / Ejabbered)?
Yohanes
1
Tidak, yang Anda beri nama adalah perpustakaan versus server.
Kev
Berikut lebih lanjut tentang lapisan (termasuk transportasi, lapisan aplikasi): en.wikipedia.org/wiki/OSI_model
Karina Klinkevičiūtė
2
jawaban yang bagus dari Kev tetapi mungkin perlu ditunjukkan 1> TCP termasuk dalam lapisan 4 - lapisan transport sedangkan HTTP dan Websocket termasuk dalam lapisan 7 - lapisan aplikasi.
Gob00st
Memang @ Gob00st - Saya juga bingung di sini. Jawaban dari Kev ini mengatakan "keduanya" karena "Anda akan menggunakan websockets (di browser modern) ... sebagai transportasi jaringan " . Tapi bagaimana kita mendamaikan itu dengan fakta bahwa WebSocket (seperti XMPP dan HTTP) sebenarnya adalah protokol aplikasi ( bukan transportasi) di yaitu OSI layer 7? Mengapa XMPP menjadi "di atas" WebSockets di browser modern?
Amelio Vazquez-Reina