साथ वेब सॉकेट एकीकृत करने के लिए हम एक काफी जटिल Django आवेदन वर्तमान द्वारा अपाचे/mod_wsgi सेवा की है और एक एडब्ल्यूएस ईएलबी लोड संतुलन के पीछे कई एडब्ल्यूएस EC2 उदाहरणों पर तैनात किया है। क्लाइंट अनुप्रयोग AJAX का उपयोग कर सर्वर सर्वर से इंटरैक्ट करते हैं। वे समय-समय पर नोटिफिकेशन और उनके राज्य के अपडेट पुनर्प्राप्त करने के लिए सर्वर को मतदान करते हैं। हम मतदान को हटाना चाहते हैं और वेब सॉकेट का उपयोग करके को "पुश" के साथ प्रतिस्थापित करना चाहते हैं।कैसे एक Django WSGI
क्योंकि मनमाना उदाहरणों ग्राहकों से वेब सॉकेट अनुरोध को संभाल और उन वेब सॉकेट पर रखें, और क्योंकि हम ग्राहकों को डेटा जो एक ही उदाहरण धक्का के लिए स्रोत डेटा प्रदान करता है उस पर नहीं हो सकता है पुश करने के लिए चाहते हैं, हम उचित उदाहरण के लिए डेटा रूट करने के लिए और फिर उस उदाहरण से उचित क्लाइंट वेब सॉकेट पर रूट करने का तरीका चाहिए।
हम समझते हैं कि अपाचे/mod_wsgi वेब सॉकेट और nginx/gunicorn साथ इन घटकों की जगह और gevent-WebSocket कार्यकर्ता उपयोग करने के लिए योजना के साथ अच्छी तरह से नहीं खेलते हैं। हालांकि, यदि कई कार्यकर्ताओं में से एक ग्राहकों को वेब सॉकेट स्थापित करने के अनुरोध प्राप्त करता है, और कार्यकर्ता प्रक्रियाओं के जीवनकाल को मुख्य बंदूक प्रक्रिया द्वारा नियंत्रित किया जाता है, तो यह स्पष्ट नहीं है कि अन्य कार्यकर्ता कैसे प्रक्रिया करते हैं, या वास्तव में गैर-बंदूक प्रक्रियाएं इन वेब सॉकेट में डेटा भेज सकती हैं।
एक विशेष मामले के इस एक है: जो जारी करता है एक HTTP अनुरोध एक EC2 उदाहरण (मेजबान) और वांछित व्यवहार करने के लिए निर्देशित किया गया है एक उपयोगकर्ता है कि डेटा वाले किसी अन्य उपयोगकर्ता एक वेब सॉकेट में खुला है के लिए भेजा जाना है एक पूरी तरह से विभिन्न उदाहरण। कोई आसानी से उस प्रणाली को कल्पना कर सकता है जहां प्रत्येक उदाहरण पर ब्रोकर (उदा। Rabbitmq) चल रहा है, उस संदेश को संदेश भेजा जा सकता है जिसमें वेब सॉकेट के माध्यम से भेजा जाने वाला डेटा उस उदाहरण से कनेक्ट किया गया है। लेकिन इन संदेशों के हैंडलर वेब सॉकेट तक कैसे पहुंच सकते हैं, जो कि बंदूकधारी की कार्यकर्ता प्रक्रिया में प्राप्त हुआ था? उच्च स्तरीय पायथन वेब सॉकेट ऑब्जेक्ट्स ने गेवेंट-वेबस्केट और को एक कर्मचारी को उपलब्ध कराया नहीं जा सकता है (वे उदाहरण विधियों को पिकलिंग के लिए कोई समर्थन नहीं है), इसलिए उन्हें आसानी से किसी कार्यकर्ता प्रक्रिया द्वारा साझा नहीं किया जा सकता है आश्चर्यजनक, बाहरी प्रक्रिया।
वास्तव में, इस सवाल की जड़ कैसे वेब सॉकेट जो इस तरह के रूप में सर्वर में ग्राहकों से HTTP अनुरोध द्वारा शुरू की और WSGI द्वारा नियंत्रित किया जाता है संचालकों बाहरी प्रक्रियाओं द्वारा पहुँचा जा सकता है gunicorn करने के लिए नीचे आता है? यह प्रतीत नहीं होता सही कि कार्यकर्ता प्रक्रियाओं, जो HTTP अनुरोध को संभालने के लिए अंडे होगा धागे लंबे समय से चल अन्य प्रक्रियाओं से वेब सॉकेट और समर्थन से निपटने संदेशों पर लटका वेब सॉकेट है कि करने के लिए संदेश भेजने के लिए करना है gunicorn उन कार्यकर्ता प्रक्रियाओं के माध्यम से संलग्न किया गया है।
क्या कोई बता सकता है कि कैसे वेब सॉकेट और डब्लूएसजीआई-आधारित HTTP अनुरोध हैंडलर संभवतः पर्यावरण के बारे में बता सकते हैं?
धन्यवाद।
यदि, एक HTTP अनुरोध को संभालने के परिणामस्वरूप, सर्वर को वेबशॉट के नीचे एक पुश अधिसूचना भेजने की आवश्यकता है कि किसी अन्य उपयोगकर्ता ने एक ही मेजबान या एक अलग मेजबान पर किसी अन्य कार्यकर्ता प्रक्रिया से कनेक्ट किया है, तो प्रेषक कार्यकर्ता को कतारबद्ध करना होगा संदेश (कहीं, लेकिन शायद एक एएमक्यूपी सर्वर के लिए जो प्रत्येक कर्मचारी की सदस्यता लेता है) और प्राप्तकर्ता कार्यकर्ता (जो लक्ष्य क्लाइंट से वेबसाईट पर हो रहा है) को कतार से संदेश पढ़ना होगा और इसे वेब पर भेजना होगा सॉकेट। क्या यह एक उचित वास्तुकला की तरह प्रतीत होता है? – eswenson
मुझे अनुरोध/प्रतिक्रिया प्रसंस्करण की तुलना में "अन्य कार्य" के लिए कार्यकर्ता प्रक्रियाओं का उपयोग करने में सहज महसूस नहीं हुआ था, लेकिन आप कह रहे हैं कि ऐसा कोई कारण नहीं है कि वे क्यों नहीं कर सके। सही? – eswenson
वैसे एक वेबस्केट अब सरल अनुरोध/प्रतिक्रिया प्रबंधन नहीं कर रहा है, है ना? अब यह एक पूर्ण उड़ा हुआ डुप्लेक्स चैनल है। यदि आप पसंद करते हैं तो आप श्रमिकों के पूल को अलग करने के लिए वेबस्केट कनेक्शन बंद कर सकते हैं। हां, आपने जो सुझाव दिया वह सामान्य संग्रह की तरह लगता है। मेरे लिए। :) – Ivo