Herhangi bir modern tek sunucu aynı anda binlerce istemciye sunucu gönderebilir . HTTP sunucu yazılımı sadece Olay Odaklı (IOCP) odaklı olmalıdır (artık eski Apache'de bir bağlantı = bir iş parçacığı / işlem denkleminde değiliz). Windows (http.sys) yerleşik HTTP sunucusu bile IOCP yönelimli ve çok verimlidir (çekirdek modunda çalışıyor). Bu açıdan, WebSockets ve normal HTTP bağlantısı arasında ölçeklendirme konusunda çok fazla fark olmayacaktır. Bir TCP / IP bağlantısı küçük bir kaynak kullanır (bir iş parçacığından çok daha az) ve modern işletim sistemi birçok eşzamanlı bağlantıyı işlemek için optimize edilmiştir: WebSockets ve HTTP, bu TCP / IP özelliklerinden devralınan sadece OSI 7 uygulama katmanı protokolleridir.
Ancak, denemeden sonra WebSockets ile ilgili iki ana sorun gördüm:
- CDN'yi desteklemezler;
- Potansiyel güvenlik sorunları var.
Bu yüzden, herhangi bir proje için aşağıdakileri tavsiye ederim:
- WebSockets uygulamasını yalnızca istemci bildirimleri için kullanın (uzun yoklama için bir geri dönüş mekanizmasıyla - çevresinde çok sayıda kitaplık vardır);
- Önbellek için bir CDN veya proxy kullanarak diğer tüm veriler için RESTful / JSON kullanın.
Uygulamada, tam WebSockets uygulamaları iyi ölçeklenmez. WebSockets'i tasarlandıkları şey için kullanmanız yeterlidir: bildirimleri sunucudan istemciye aktarın.
WebSockets kullanımının olası sorunları hakkında:
1. Bir CDN kullanmayı düşünün
Bugün (neredeyse 4 yıl sonra), web ölçeklendirme yalnızca statik içerik (html, css, js) için değil, aynı zamanda (JSON) uygulama verileriniz için İçerik Dağıtım Ağı (CDN) kullanıcı arabirimlerini kullanmayı içerir .
Elbette, tüm verilerinizi CDN önbelleğinize koymazsınız, ancak pratikte birçok ortak içerik sık sık değişmez. REST kaynaklarınızın% 80'inin önbelleğe alınabileceğinden şüpheleniyorum ... Bir dakika (veya 30 saniye) CDN son kullanma zaman aşımı bile, merkezi sunucunuza yeni bir canlı vermek ve uygulama yanıt hızını çok artırmak için yeterli olabilir, çünkü CDN coğrafi olarak ayarlanabilir ...
Bildiğim kadarıyla CDN'de henüz WebSockets desteği yok ve bunun asla olmayacağından şüpheleniyorum. WebSockets durum bilgisi vardır, ancak HTTP durum bilgisi içermez, bu nedenle kolayca önbelleğe alınır. Aslında, WebSockets CDN dostu hale getirmek için, artık WebSockets olmayacak durumsuz bir RESTful yaklaşımına geçmeniz gerekebilir.
2. Güvenlik sorunları
WebSockets, özellikle DOS saldırıları hakkında potansiyel güvenlik sorunlarına sahiptir. Yeni güvenlik açıkları hakkında açıklama için bkz slaytları bu seti ve bu webkit bilet .
WebSockets, herhangi bir iş güvenliğinde günümüzde oldukça standart olan OSI 7 uygulama katmanı düzeyinde paket denetimi olasılığını önler. Aslında, WebSockets iletimi gizlendirir, bu nedenle güvenlik sızıntısının büyük bir ihlali olabilir.