कोई भी आधुनिक सिंगल सर्वर हजारों क्लाइंट्स को एक साथ सर्वर करने में सक्षम है । इसका HTTP सर्वर सॉफ्टवेयर सिर्फ इवेंट-ड्रिवेन (IOCP) उन्मुख होना है (हम पुराने अपाचे में एक कनेक्शन = एक धागा / प्रक्रिया समीकरण किसी भी अधिक नहीं हैं)। यहां तक कि विंडोज (HTTP.sys) में निर्मित HTTP सर्वर IOCP उन्मुख और बहुत ही कुशल (कर्नेल मोड में चल रहा है) है। इस दृष्टिकोण से, WebSockets और नियमित HTTP कनेक्शन के बीच स्केलिंग में बहुत अंतर नहीं होगा। एक टीसीपी / आईपी कनेक्शन एक छोटे संसाधन (एक थ्रेड से बहुत कम) का उपयोग करता है, और आधुनिक ओएस को कई समवर्ती कनेक्शनों को संभालने के लिए अनुकूलित किया जाता है: इस टीसीपी / आईपी विनिर्देशों से विरासत में प्राप्त वेबसूट और एचटीटीपी सिर्फ ओएसआई 7 अनुप्रयोग परत प्रोटोकॉल हैं।
लेकिन, प्रयोग से, मैंने वेबस्केट्स के साथ दो मुख्य समस्याएं देखी हैं:
- वे सीडीएन का समर्थन नहीं करते हैं;
- उनके पास संभावित सुरक्षा मुद्दे हैं।
तो मैं किसी भी परियोजना के लिए निम्नलिखित की सिफारिश करूंगा:
- केवल ग्राहक सूचनाओं के लिए वेबस्केट्स का उपयोग करें (लंबे समय से मतदान के लिए एक बैकबैक तंत्र के साथ - आसपास बहुत सारे पुस्तकालय हैं);
- कैश के लिए CDN या परदे के पीछे का उपयोग करके अन्य सभी डेटा के लिए RESTful / JSON का उपयोग करें।
व्यवहार में, पूर्ण WebSockets अनुप्रयोगों में अच्छी तरह से पैमाने नहीं हैं। बस वे क्या डिजाइन किए गए थे के लिए WebSockets का उपयोग करें: सर्वर से क्लाइंट के लिए सूचनाएं धक्का।
WebSockets के उपयोग की संभावित समस्याओं के बारे में:
1. CDN का उपयोग करने पर विचार करें
आज (लगभग 4 साल बाद), वेब स्केलिंग में कंटेंट डिलीवरी नेटवर्क (सीडीएन) फ्रंट एंड का उपयोग करना शामिल है, न केवल स्टैटिक कंटेंट (html, css, js) के लिए बल्कि आपके (JSON) एप्लिकेशन डेटा के लिए भी ।
बेशक, आप अपना सारा डेटा अपने सीडीएन कैश पर नहीं डालेंगे, लेकिन व्यवहार में, बहुत सारी सामान्य सामग्री अक्सर नहीं बदलेगी। मुझे संदेह है कि आपके REST संसाधनों का 80% कैश हो सकता है ... यहां तक कि एक मिनट (या 30 सेकंड) CDN की समय सीमा समाप्ति समय आपके केंद्रीय सर्वर को एक नया लाइव देने के लिए पर्याप्त हो सकता है, और CDN के बाद से एप्लिकेशन की प्रतिक्रिया को काफी बढ़ा सकता है। भौगोलिक रूप से देखते रहें ...
मेरी जानकारी के लिए, CDN में अभी तक कोई भी WebSockets समर्थन नहीं है, और मुझे संदेह है कि यह कभी नहीं होगा। वेब पॉकेट्स स्टेटफुल हैं, जबकि HTTP स्टेटलेस है, इसलिए बहुत आसानी से कैश हो जाता है। वास्तव में, वेबसॉकेट्स को CDN के अनुकूल बनाने के लिए, आपको एक स्टेटलेस रेस्टफुल अप्रोच पर स्विच करना पड़ सकता है ... जो कि वैबसाइट्स नहीं होगा।
2. सुरक्षा के मुद्दे
वेब सॉकेट्स में संभावित सुरक्षा मुद्दे हैं, विशेष रूप से डॉस हमलों के बारे में। नई सुरक्षा कमजोरियों के बारे में चित्रण के लिए, स्लाइड्स का यह सेट और यह वेबकिट टिकट देखें ।
WebSockets किसी भी व्यावसायिक सुरक्षा में, OSI 7 एप्लिकेशन लेवल स्तर पर पैकेट निरीक्षण के किसी भी अवसर से बचते हैं, जो आजकल बहुत मानक है। वास्तव में, WebSockets संचरण को बाधित करता है, इसलिए सुरक्षा रिसाव का एक बड़ा उल्लंघन हो सकता है।