Apa perbedaan antara socket.io dan websockets di node.js?
Apakah keduanya teknologi server push? Satu-satunya perbedaan yang saya rasakan adalah,
socket.io memungkinkan saya untuk mengirim / memancarkan pesan dengan menentukan nama acara.
Dalam kasus socket.io, pesan dari server akan menjangkau semua klien, tetapi untuk hal yang sama di websockets saya terpaksa menyimpan array semua koneksi dan memutarnya untuk mengirim pesan ke semua klien.
Juga, saya heran mengapa inspektur web (seperti Chrome / firebug / fiddler) tidak dapat menangkap pesan-pesan ini (dari socket.io/websocket) dari server?
Tolong jelaskan ini.
Jawaban:
Keuntungannya adalah ia menyederhanakan penggunaan WebSockets seperti yang Anda jelaskan di # 2, dan mungkin yang lebih penting itu memberikan kegagalan-protokol lain jika WebSockets tidak didukung di browser atau server. Saya akan menghindari penggunaan WebSockets secara langsung kecuali jika Anda sangat terbiasa dengan lingkungan apa yang tidak berfungsi dan Anda mampu mengatasi keterbatasan itu.
Ini adalah bacaan yang bagus di WebSockets dan Socket.IO.
http://davidwalsh.name/websocket
sumber
Kesalahpahaman
Ada beberapa kesalahpahaman umum mengenai WebSocket dan Socket.IO:
Kesalahpahaman pertama adalah bahwa menggunakan Socket.IO secara signifikan lebih mudah daripada menggunakan WebSocket yang tampaknya tidak demikian. Lihat contoh di bawah ini.
Kesalahpahaman kedua adalah bahwa WebSocket tidak didukung secara luas di browser. Lihat di bawah untuk info lebih lanjut.
Kesalahpahaman ketiga adalah bahwa Socket.IO menurunkan versi koneksi sebagai mundur pada browser yang lebih lama. Ini sebenarnya mengasumsikan bahwa browser sudah tua dan mulai koneksi AJAX ke server, yang kemudian ditingkatkan pada browser yang mendukung WebSocket, setelah beberapa lalu lintas dipertukarkan. Lihat di bawah untuk detailnya.
Eksperimen saya
Saya menulis modul npm untuk menunjukkan perbedaan antara WebSocket dan Socket.IO:
Ini adalah contoh sederhana dari kode sisi-server dan sisi-klien - klien terhubung ke server menggunakan WebSocket atau Socket.IO dan server mengirimkan tiga pesan dalam interval 1 detik, yang ditambahkan ke DOM oleh klien.
Sisi server
Bandingkan contoh sisi server menggunakan WebSocket dan Socket.IO untuk melakukan hal yang sama di aplikasi Express.js:
Server WebSocket
Contoh server WebSocket menggunakan Express.js:
Sumber: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.js
Socket.IO Server
Contoh server Socket.IO menggunakan Express.js:
Sumber: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.js
Sisi klien
Bandingkan contoh sisi klien menggunakan WebSocket dan Socket.IO untuk melakukan hal yang sama di browser:
Klien WebSocket
Contoh klien WebSocket menggunakan vanilla JavaScript:
Sumber: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.html
Klien Socket.IO
Contoh klien Socket.IO menggunakan JavaScript vanilla:
Sumber: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.html
Lalu lintas jaringan
Untuk melihat perbedaan dalam lalu lintas jaringan Anda dapat menjalankan pengujian saya . Inilah hasil yang saya dapatkan:
Hasil WebSocket
2 permintaan, 1,50 KB, 0,05 s
Dari 2 permintaan itu:
(Permintaan peningkatan koneksi terlihat pada alat pengembang dengan respons 101 Switching Protocols.)
Hasil Socket.IO
6 permintaan, 181,56 KB, 0,25 dtk
Dari 6 permintaan itu:
Tangkapan layar
Hasil WebSocket yang saya dapatkan di localhost:
Hasil Socket.IO yang saya dapatkan di localhost:
Uji dirimu
Mulai cepat:
Buka http: // localhost: 3001 / di browser Anda, buka alat pengembang dengan Shift + Ctrl + I, buka tab Network dan muat ulang halaman dengan Ctrl + R untuk melihat lalu lintas jaringan untuk versi WebSocket.
Buka http: // localhost: 3002 / di browser Anda, buka alat pengembang dengan Shift + Ctrl + I, buka tab Network dan muat ulang halaman dengan Ctrl + R untuk melihat lalu lintas jaringan untuk versi Socket.IO.
Untuk menghapus instalasi:
Kompatibilitas browser
Pada Juni 2016 WebSocket bekerja pada semuanya kecuali Opera Mini, termasuk IE lebih tinggi dari 9.
Ini adalah kompatibilitas browser WebSocket di Dapatkah Saya Menggunakan pada Juni 2016:
Lihat http://caniuse.com/websockets untuk info terbaru.
sumber
Saya akan memberikan argumen terhadap penggunaan socket.io.
Saya pikir menggunakan socket.io semata-mata karena memiliki fallback bukan ide yang baik. Biarkan IE8 RIP.
Di masa lalu ada banyak kasus di mana versi baru NodeJS telah merusak socket.io. Anda dapat memeriksa daftar ini untuk contoh ... https://github.com/socketio/socket.io/issues?q=install+error
Jika Anda pergi untuk mengembangkan aplikasi Android atau sesuatu yang perlu bekerja dengan aplikasi Anda yang ada, Anda mungkin akan segera bekerja dengan WS, socket.io mungkin memberi Anda beberapa masalah di sana ...
Ditambah modul WS untuk Node.JS sangat mudah digunakan.
sumber
Menggunakan Socket.IO pada dasarnya seperti menggunakan jQuery - Anda ingin mendukung browser yang lebih lama, Anda perlu menulis lebih sedikit kode dan pustaka akan memberikan fallback. Socket.io menggunakan teknologi soket web jika tersedia, dan jika tidak, periksa jenis komunikasi terbaik yang tersedia dan gunakan.
sumber
Bahkan jika browser modern mendukung WebSockets sekarang, saya pikir tidak perlu membuang SocketIO dan masih memiliki tempatnya di setiap proyek saat ini. Sangat mudah dimengerti, dan secara pribadi, saya belajar bagaimana WebSockets bekerja berkat SocketIO.
Seperti yang dikatakan dalam topik ini, ada banyak perpustakaan integrasi untuk Angular, React, dll. Dan tipe definisi untuk TypeScript dan bahasa pemrograman lainnya.
Poin lain yang akan saya tambahkan pada perbedaan antara Socket.io dan WebSockets adalah bahwa pengelompokan dengan Socket.io bukan masalah besar. Socket.io menawarkan Adapters yang dapat digunakan untuk menautkannya dengan Redis untuk meningkatkan skalabilitas. Anda memiliki ioredis dan socket.io-redis misalnya.
Ya saya tahu, SocketCluster ada, tapi itu di luar topik.
sumber
Socket.IO menggunakan WebSocket dan ketika WebSocket tidak tersedia, gunakan algo mundur untuk membuat koneksi waktu nyata.
sumber
https://socket.io/docs/#What-Socket-IO-is-not (dengan penekanan saya )
sumber