2013-01-08 11 views
16

यदि मैं सर्वर-प्रेषित ईवेंट सिद्धांत को सही ढंग से समझता हूं, प्रत्येक बार जब कोई क्लाइंट किसी इवेंटसोर्स में पंजीकृत होता है, तो यह वास्तव में ईवेंट के प्रबंधन के संसाधन के लिए एक नया HTTP कनेक्शन खोलता है। अन्य HTTP अनुरोधों के विपरीत, कनेक्शन ज़िंदा रहता है इसलिए क्लाइंट डिस्कनेक्ट होने तक इस क्लाइंट को समर्पित सर्वर प्रक्रिया/थ्रेड चलती रहती है।सर्वर से भेजे गए ईवेंट सर्वर की तरफ

क्या होगा यदि हमारे पास एसएसई का उपयोग कर 1000 से अधिक ग्राहक जुड़े हैं? क्या हमारे पास एसएसई को संभालने के लिए समसामयिक रूप से चल रहे 1000 प्रक्रियाओं/धागे (एक ही काम कर रहे हैं)? मुझे लगता है कि मैं गलत हूं लेकिन यदि मैं नहीं हूं, तो क्या यह सामान्य AJAX मतदान विधि से वास्तव में अधिक कुशल है जहां कम से कम सर्वर को कई प्रक्रियाओं/धागे को एक साथ चलाने की आवश्यकता नहीं होती है?

+5

अपाचे जैसे वेबसर्वर के साथ यह बहुत संसाधन-भूखा होगा। लेकिन यही कारण है कि asodec webservers जैसे node.js ... – ThiefMaster

उत्तर

17

हां, प्रत्येक क्लाइंट कनेक्शन को तब तक खुला रखता है जब तक वह कर सके। 1000 समवर्ती उपयोगकर्ताओं के साथ आपके पास 1000 टीसीपी/आईपी कनेक्शन खुले होंगे।

हालांकि, क्या प्रत्येक कनेक्शन थ्रेड का उपयोग करता है सर्वर पर निर्भर करता है।

अपाचे आमतौर पर प्रत्येक कनेक्शन के लिए एक थ्रेड चल रहा है, इसलिए यह बहुत महंगा है। अपाचे के साथ KeepAlive को अक्षम करना और मतदान का उपयोग करना सबसे अच्छा है।

ओटीओएच घटना-आधारित सर्वरों जैसे node.js के साथ आपके पास केवल एक प्रक्रिया हो सकती है जो सभी कनेक्शन प्रबंधित करती है, इसलिए प्रत्येक कनेक्शन की लागत बहुत कम है और आपको हजारों कनेक्शन आसानी से खोलने में सक्षम होना चाहिए।

एसएसई के बारे में अच्छी बात यह है कि आप इसे मतदान करने के लिए भी उपयोग कर सकते हैं। इसमें retry: निर्देश है जो निर्दिष्ट करता है कि क्लाइंट को दोबारा जोड़ने (मतदान) से पहले कितना समय इंतजार करना चाहिए। जब आप मतदान करना चाहते हैं तो बस उसे भेजें और कनेक्शन बंद करें।

+6

आपके उत्तर के लिए धन्यवाद। ठीक है तो मूल रूप से, किसी को एक ईवेंट संचालित वेब सर्वर का उपयोग करना चाहिए यदि वह अपने आवेदन में एसएसई का उपयोग करने की योजना बना रहा है और ग्राहकों की एक बड़ी संख्या की अपेक्षा करता है। यह एक महत्वपूर्ण बिंदु है जो मैंने पढ़ा है एसएसई के बारे में लेखों में गायब था। – ouno

11

यह सर्वर के थ्रेडिंग मॉडल पर निर्भर करता है। Apache प्रति कनेक्शन एक थ्रेड (या प्रक्रिया) के लिए डिफ़ॉल्ट है, भले ही धागे बहुत अधिक नहीं कर रहे हैं (जैसा कि एसएसई कनेक्शन के साथ अपेक्षित है), वे संसाधनों का उपयोग करके वहां बैठते हैं।

Nginx जैसे सर्वर थोड़ा अलग मॉडल रखते हैं, प्रत्येक थ्रेड असीमित रूप से एकाधिक अनुरोधों को संभालता है। तो एसएसई और वेबसाकेट जैसी चीजें कहीं अधिक कुशल हैं।

अपाचे perform more like Nginx और इसी तरह के सर्वर पर बनाया जा सकता है।

संबंधित मुद्दे