2013-06-07 4 views
5

मैं सर्वर-साइड वेबस्केट एंडपॉइंट्स के लिए कार्यान्वयन/विकल्पों को समझने की कोशिश कर रहा हूं - विशेष रूप से पीएसजीआई/प्लेक का उपयोग करके पर्ल में और मेरे पास एक प्रश्न है: सभी सर्वर-पक्ष क्यों हैं इवेंट-संचालित पीएसजीआई सर्वर (Twiggy, Tatsumaki, आदि) के आसपास आधारित websocket कार्यान्वयन?गैर-ईवेंट संचालित HTTP सर्वर वातावरण में सर्वर-साइड वेबसाइट्स कार्यान्वयन

मुझे लगता है कि वेबसाइकिल संचार असीमित है, लेकिन एक गैर-घटना संचालित पीएसजीआई सर्वर (स्टर्मन कहें) चीजों के वेबसाइकिल पक्ष को संभालने के लिए एक असीमित श्रोता को जन्म दे सकता है। मैंने वेबस्केट सर्वरों के PHP कार्यान्वयन को देखा है (लेकिन समझा नहीं है), तो पीएसजीआई के साथ ऐसा क्यों नहीं किया जा सकता है, बिना सर्वर को किसी ईवेंट को बदलने के लिए?

+0

वेबसाइटों में आम तौर पर लंबे समय से चलने वाले कनेक्शन शामिल होते हैं। प्री-फोर्क सर्वर के साथ, आप जल्दी से अपने सर्वर पर स्मृति से बाहर हो जाएंगे। – stu42j

+0

[php websockets] के लिए पहली हिट (http://socketo.me/docs/deploy) में एक अलग async प्रक्रिया शामिल है। – stu42j

उत्तर

1

सॉकेट से निपटने के लिए अंतर्निहित नेटवर्क तर्क मंच, ओएस और विशेष सॉफ्टवेयर कार्यान्वयन पर निर्भर करता है।
सबसे आम तीन तरीके हैं:

  • खींच - वहाँ ब्लॉक कर रहा है निरंतर "पूछ" यदि सॉकेट कुछ डेटा है। यह विधि बहुत खराब है, क्योंकि यह तब तक मुख्य धागे के निष्पादन को अवरुद्ध कर देगी जब तक कि यह कुछ डेटा के लिए प्रतीक्षा करे।
  • थ्रेड प्रति सॉकेट - प्रत्येक नए कनेक्शन में नए धागे बनाने और प्रत्येक सॉकेट को अवरुद्ध तरीके से पूछने में उस थ्रेड के भीतर होता है। तो यह तर्क के साथ मुख्य धागे को ब्लॉक नहीं करेगा। यह विधि खराब है क्योंकि प्रत्येक कनेक्शन के लिए धागा बनाना स्मृति के लिए बहुत महंगा है, और ओएस और अन्य मानदंडों के आधार पर लगभग 1 एमबी या रैम हो सकता है।
  • async - कुछ होने पर आपकी प्रक्रिया को "सूचित" करने के लिए सिस्टम सुविधाओं का उपयोग करता है। तो एक बार आपका ऐप तैयार हो जाने पर आप प्रतिक्रिया दे सकते हैं (सिंगल थ्रेडेड ऐप के मामले में) या फिर भी अलग थ्रेड में प्रतिक्रिया दें। यह विधि अच्छी तरह से कुशल है क्योंकि यह रैम बचाती है, और आपके ऐप को प्रतीक्षा करने या डेटा मांगने की आवश्यकता के बिना काम करने की अनुमति देती है। यह मौजूदा कार्यक्षमताओं का उपयोग करता है जो अधिकांश ओएस और प्लेटफ़ॉर्म प्रदान करते हैं।

इसे ध्यान में रखते हुए, आप वास्तव में सॉकेट ट्रैफ़िक से निपटने के लिए एकल प्रक्रिया कार्यात्मक तरीका बना सकते हैं। लेकिन यह पहले से सिद्ध साबित नहीं हुआ है। यही कारण है कि पूरी तरह से async मॉडल आज प्रमुख हैं, क्योंकि ज्यादातर भाषाओं और प्लेटफार्म इस तरह के प्रतिमान का समर्थन करते हैं।

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