2011-07-20 13 views
7

के साथ असिंक्रोनस डब्लूएसजीआई मैं एक मुड़ वाले एप्लिकेशन के लिए एक वेब इंटरफ़ेस बना रहा हूं और सीधे twisted.web की बजाय डब्लूएसजीआई का उपयोग करना चाहता हूं (क्योंकि बाकी की वेबसाइट डब्लूएसजीआई है और मेरे पास पहले से ही एक पर्याप्त डब्लूएसजीआई कोडबेस है)।ट्विस्ट

मुड़ प्रलेखन पेज मैं WSGIResource के बारे में पाया (http://twistedmatrix.com/documents/current/web/howto/web-in-60/wsgi.html) में कहा गया: किसी अन्य WSGI कंटेनर की तरह, आप अपने डब्लूएसजीआई अनुप्रयोगों में एसिंक्रोनस कुछ भी नहीं कर सकता, भले ही यह एक ट्विस्ट डब्लूएसजीआई कंटेनर है।

यह सच होने के लिए है? क्या WSGI में twisted.web शैली एसिंक्रोनस वेब अनुरोध हैंडलिंग करने के कुछ कम से कम हैकी तरीके - शायद एक और मुफ्त सॉफ्टवेयर प्रोजेक्ट के हिस्से के रूप में? मान लीजिए कि, मेरी योजना है कि डब्लूएसजीआई थ्रेड रिएक्टर थ्रेड में उनके असीमित काम करते हैं और डेटा उपलब्ध होने तक मतदान द्वारा ब्लॉक करते हैं। यह सुंदर नहीं है।

होती है, तो एसिंक्रोनस रूप में मुड़ मैं इसे जानकर अच्छा लगेगा WSGI अनुरोधों को संभालने के एक यथोचित सरल तरीका है।

+1

मोड़ के थ्रेडपूल के साथ wsgi चलाना काफी आसान है, http://stackoverflow.com/questions/5248825/web-interface-for-a-twisted-plication –

+0

इसके लायक होने के लिए, मुझे वास्तव में वास्तव में 'ट्विस्टेड वेब' उत्पादन में wsgi कंटेनर के लिए। 'चेरीड' और एक अच्छा सा स्नैपियर और अपाचे + mod_wsgi से अधिक टिकाऊ से कॉन्फ़िगर करना आसान है। – SingleNegationElimination

उत्तर

5

आप डब्लूएसजीआई का उपयोग क्यों करना चाहते हैं और असीमित चीजें करना चाहते हैं? डब्लूएसजीआई का लाभ यह है कि आप किसी भी डब्लूएसजीआई कंटेनर पर अपना आवेदन तैनात कर सकते हैं। यदि आप एसिंक्रोनस चीजों को करने के लिए ट्विस्टेड एपीआई का उपयोग करना शुरू करते हैं, तो आप केवल अपने एप्लिकेशन को ट्विस्ट के डब्लूएसजीआई कंटेनर में ही तैनात कर सकते हैं।

आपको शायद अपने एसिंक्रोनस कोड के लिए डब्लूएसजीआई के बिना ट्विस्टेड वेब का उपयोग करना चाहिए।

+1

यह एक बड़े डब्लूएसजीआई-आधारित वेबपैप का एक घटक है - एकमात्र ऐसा हिस्सा जिसे मुड़ने के साथ काम करने की ज़रूरत है - इसलिए मैं उस डब्लूएसजीआई-आधारित ढांचे के बहुत से पुनर्लेखन से बचने की उम्मीद कर रहा था। वैसे भी, आप सही हैं, मैं इसके बजाय वेनिला ट्विस्टेड वेब का उपयोग करने जा रहा हूं। –

+1

आप उसी कोडबेस में कॉल करने के लिए वेनिला ट्विस्टेड वेब का भी उपयोग कर सकते हैं जिसमें डब्लूएसजीआई इंटरफ़ेस भी है। असल में, ट्विस्टेड वेब कुछ तरीकों से है - 'GetChild', 'render_GET',' render_POST' - जिसे आप अपने एप्लिकेशन का पर्दाफाश करने के लिए लागू करते हैं। तो आपको सीमा पर थोड़ा गोंद कोड लिखना होगा, लेकिन आपको वास्तव में उस इंटरफ़ेस का उपयोग करने के लिए स्क्रैच से सबकुछ फिर से लिखना नहीं चाहिए। – Glyph

5

सिद्धांत रूप में, WSGI अतुल्यकालिक कार्यक्रम डिजाइन के साथ आंतरिक रूप से असंगत नहीं है, वास्तव में, पीईपी 333 निर्दिष्ट करने के लिए कुछ काफी लंबाई तक जाता है कि सर्वर, एप्लिकेशन और मिडलवेयर को उस तरह की चीज़ों का समर्थन करने के लिए कैसे व्यवहार करना चाहिए।

इसके दिल में इटरेटर कंटेनर पर लौट रहा है। प्रत्येक बार एक एसिंक्रोनस wsgi app_iter का आह्वान किया जाता है, यह इसके सभी लंबित असिंक्रोनिक कार्यों (डेटाबेस कनेक्शन, इत्यादि) पर जांच करेगा और यदि उनमें से किसी के पास डेटा है, तो app_iter कुछ डेटा उत्पन्न करता है; अन्यथा यह एक खाली स्ट्रिंग पैदा करता है। इसका समर्थन करने के लिए, एक wsgi कंटेनर को सभी इन-फ्लाइट अनुरोधों का ट्रैक रखने की आवश्यकता होगी, और उनमें से प्रत्येक को अधिक डेटा प्राप्त करने के बदले में पुन: प्रयास करना होगा, इसके अलावा किसी अन्य स्थगित कार्य को सेवा देने के अलावा।

सिद्धांत रूप में, बहुत कम wsgi ऐप्स या ढांचे वास्तव में ऐसा करते हैं। लगभग हमेशा के लिए, wsgi ढांचे सभी कारणों के लिए ब्लॉक; किसी भी कारण से डिस्क से फ़ाइलों को लोड करना या डेटा से डेटा लोड करना (अधिकांश ओआरएम इसे रोकने के लिए एक कठिन समस्या बनाते हैं।) ट्विस्ट का wsgi कंटेनर धारणा के तहत काम करता है कि चूंकि कुछ wsgi ऐप्स ब्लॉक करते हैं, शायद यह कोई भी wsgi ऐप ब्लॉक हो सकता है, और इसलिए हमेशा उन्हें धागे में चलाता है।

दो चीजें हैं जो आप कर सकते हैं; या तो मुड़ते हुए अपने स्वयं के वेब ढांचे का पता लगाएं, जो काफी ठोस है; या मुड़ के अपने कंटेनर के बाहर मुड़ने के लिए एक wsgi wrapper बनाने पर विचार करें। यह सुनिश्चित करना कि wsgi ऐप वास्तव में असिंक्रोनस है, निश्चित रूप से उत्तरार्द्ध की पूर्व शर्त है, लेकिन wsgi स्वयं बहुत सरल है, http पर एक पतला आवरण है, और इसलिए यह काफी आसान होना चाहिए।

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