Server tunggal modern mana pun dapat server ribuan klien sekaligus . Perangkat lunak server HTTP-nya hanya berorientasi pada Event-Driven (IOCP) (kami tidak berada di Apache satu koneksi lama = satu thread / persamaan proses lagi). Bahkan server HTTP yang dibangun di Windows (http.sys) berorientasi pada IOCP dan sangat efisien (berjalan dalam mode kernel). Dari sudut pandang ini, tidak akan ada banyak perbedaan dalam penskalaan antara WebSockets dan koneksi HTTP biasa. Satu koneksi TCP / IP menggunakan sedikit sumber daya (lebih sedikit daripada utas), dan OS modern dioptimalkan untuk menangani banyak koneksi bersamaan: WebSockets dan HTTP hanyalah protokol lapisan aplikasi OSI 7, yang diwarisi dari spesifikasi TCP / IP ini.
Namun, dari percobaan, saya telah melihat dua masalah utama dengan WebSockets:
- Mereka tidak mendukung CDN;
- Mereka memiliki masalah keamanan potensial.
Jadi saya akan merekomendasikan yang berikut ini, untuk proyek apa pun:
- Gunakan WebSockets hanya untuk pemberitahuan klien (dengan mekanisme mundur untuk pemungutan suara panjang - ada banyak perpustakaan di sekitarnya);
- Gunakan RESTful / JSON untuk semua data lainnya, menggunakan CDN atau proksi untuk cache.
Dalam praktiknya, aplikasi WebSockets lengkap tidak skala dengan baik. Cukup gunakan WebSockets untuk apa yang mereka dirancang untuk: mendorong pemberitahuan dari server ke klien.
Tentang potensi masalah menggunakan WebSockets:
1. Pertimbangkan untuk menggunakan CDN
Hari ini (hampir 4 tahun kemudian), penskalaan web melibatkan penggunaan ujung depan Jaringan Pengiriman Konten (CDN), tidak hanya untuk konten statis (html, css, js) tetapi juga data aplikasi Anda (JSON) .
Tentu saja, Anda tidak akan meletakkan semua data Anda di cache CDN Anda, tetapi dalam praktiknya, banyak konten umum tidak akan sering berubah. Saya menduga bahwa 80% dari sumber daya REST Anda mungkin di-cache ... Bahkan satu menit (atau 30 detik) batas waktu kedaluwarsa CDN mungkin cukup untuk membuat server pusat Anda memiliki live baru, dan banyak meningkatkan respons aplikasi, karena CDN dapat disetel secara geografis ...
Sepengetahuan saya, belum ada dukungan WebSockets di CDN, dan saya kira itu tidak akan pernah terjadi. WebSockets adalah statefull, sedangkan HTTP adalah stateless, jadi lebih mudah di-cache. Bahkan, untuk membuat WebSockets ramah-CDN, Anda mungkin perlu beralih ke pendekatan RESTful tanpa kewarganegaraan ... yang tidak akan menjadi WebSockets lagi.
2. Masalah keamanan
WebSockets memiliki masalah keamanan potensial, terutama tentang serangan DOS. Untuk ilustrasi tentang kerentanan keamanan baru, lihat kumpulan slide ini dan tiket webkit ini .
WebSockets menghindari kemungkinan inspeksi paket pada tingkat lapisan aplikasi OSI 7, yang menjadi standar saat ini, dalam keamanan bisnis apa pun. Bahkan, WebSockets membuat transmisi menjadi kabur, jadi mungkin merupakan pelanggaran utama kebocoran keamanan.