सादे अंग्रेजी में WSGI और CGI क्या हैं?


127

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

सादे अंग्रेजी में यह वास्तव में क्या है?

क्या यह सिर्फ टर्मिनल के लिए अनुरोध करता है और आउटपुट को रीडायरेक्ट करता है?


जवाबों:


60

WSGI वेब सर्वर स्टार्ट पर Python दुभाषिया चलाता है, या तो वेब सर्वर प्रक्रिया (एम्बेडेड मोड) के हिस्से के रूप में या एक अलग प्रक्रिया (डेमन मोड) के रूप में, और इसमें स्क्रिप्ट लोड करता है। प्रत्येक अनुरोध को स्क्रिप्ट में एक विशिष्ट फ़ंक्शन में परिणाम दिया जाता है, अनुरोध पर्यावरण के साथ फ़ंक्शन के तर्क के रूप में पारित होता है।

CGI स्क्रिप्ट को प्रत्येक अनुरोध के रूप में एक अलग प्रक्रिया के रूप में चलाता है और इसके साथ "संवाद" करने के लिए पर्यावरण चर, स्टडिन और स्टडआउट का उपयोग करता है।


15
WSGI! = Mod_wsgi आपकी भाषा आपको सुझाव देती है कि mod_wsgi जो कि WSGI का एक कार्यान्वयन है। WSGI अपने आप में एक विनिर्देश है और इसे CGI के शीर्ष सहित कई अलग-अलग तरीकों से लागू किया जा सकता है।
ग्राहम डम्पलटन

@ ग्राहम: क्या आप कह रहे हैं कि कोई अन्य WSGI कंटेनर नहीं हैं जो उन मोड में WSGI ऐप चलाने का समर्थन करते हैं?
इग्नासियो वाज़केज़-अब्राम्स

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

1
@GrahamDumpleton, जिज्ञासा से बाहर, क्या आप समझेंगे कि WSGI को CGI के शीर्ष पर कैसे लागू किया जा सकता है?
योलांद

2
WSGI विनिर्देश पढ़ें। यह एक उदाहरण CGI / WSGI पुल दिखाता है। python.org/dev/peps/pep-3333/#the-server-gateway-side अधिक मजबूत कार्यान्वयन के लिए github.com/GrahamDumpleton/cgi2wsgi गंभीरता से देखें , हालांकि सामान्य तौर पर आप CGI से बचना चाहेंगे।
ग्राहम डुप्लेटन

256

पूरी तरह से कदम पीछे के बिंदु से, Blankman, यहाँ वेब सेवाओं के प्रवेश द्वार इंटरफ़ेस के लिए मेरा "परिचय पृष्ठ" है:

भाग एक: वेब सर्वर

वेब सर्वर प्रतिक्रियाओं की सेवा करते हैं। वे चारों ओर बैठते हैं, धैर्यपूर्वक प्रतीक्षा कर रहे हैं, और फिर अचानक बिना किसी चेतावनी के:

  • एक ग्राहक प्रक्रिया एक अनुरोध भेजता है। ग्राहक प्रक्रिया एक वेब सर्वर, एक बॉट, एक मोबाइल ऐप, जो कुछ भी हो सकती है। यह बस "ग्राहक" है
  • वेब सर्वर यह अनुरोध प्राप्त करता है
  • जानबूझकर की जाने वाली विभिन्न चीजें होती हैं (नीचे देखें)
  • वेब सर्वर क्लाइंट को कुछ वापस भेजता है
  • वेब सर्वर फिर से बैठता है

वेब सर्वर (कम से कम, बेहतर वाले) इस पर बहुत अच्छे हैं। वे मांग के आधार पर प्रसंस्करण को ऊपर और नीचे करते हैं, वे वास्तव में बहुत कठिन नेटवर्क पर ग्राहकों के साथ बातचीत करते हैं और हमें कभी भी इसके बारे में चिंता करने की ज़रूरत नहीं है। वे बस सेवा करते रहते हैं।

यह मेरा मुद्दा है: वेब सर्वर बस हैं: सर्वर। वे सामग्री के बारे में कुछ भी नहीं जानते हैं, उपयोगकर्ताओं के बारे में कुछ भी नहीं, वास्तव में कुछ भी नहीं है कि बहुत इंतजार कैसे करें और मज़बूती से जवाब दें।

वेब सर्वर की आपकी पसंद को आपकी डिलीवरी प्राथमिकता को प्रतिबिंबित करना चाहिए, न कि आपके सॉफ़्टवेयर को। आपका वेब सर्वर सेवा के प्रभारी होना चाहिए, प्रसंस्करण या तार्किक सामान नहीं।

भाग दो: (अजगर) सॉफ़्टवेयर

सॉफ्टवेयर आसपास नहीं बैठता है। सॉफ़्टवेयर केवल निष्पादन समय पर मौजूद है। सॉफ्टवेयर अपने वातावरण में अप्रत्याशित परिवर्तन (जब यह उम्मीद नहीं की जा रही है, तो मापदंडों का नाम बदला जा रहा है आदि) के लिए सॉफ्टवेयर बहुत अनुकूल नहीं है। हालाँकि ऑप्टिमाइज़ेशन आपके डिज़ाइन का केंद्रीय सिद्धांत होना चाहिए (बेशक), सॉफ़्टवेयर स्वयं को ऑप्टिमाइज़ नहीं करता है। डेवलपर्स अनुकूलन करते हैं। सॉफ्टवेयर निष्पादित करता है। सॉफ्टवेयर ऊपर दिए गए 'जानबूझकर गड़गड़ाहट' अनुभाग में सभी सामान करता है। कुछ भी हो सकता है।

आपकी पसंद या सॉफ़्टवेयर का डिज़ाइन आपके एप्लिकेशन, कार्यक्षमता की आपकी पसंद और वेब सर्वर की आपकी पसंद को नहीं दर्शाता है।

यह वह जगह है जहाँ वेब सर्वर के लिए भाषाओं में "संकलन" की पारंपरिक विधि दर्दनाक हो जाती है। आप अंत में भौतिक सर्वर वातावरण से निपटने के लिए अपने आवेदन में कोड डालते हैं या, कम से कम, वेब सर्वर पर एकरूपता का भ्रम देने के लिए, रनटाइम में शामिल करने के लिए एक उपयुक्त 'रैपर' लाइब्रेरी चुनने के लिए मजबूर किया जाता है।

WSGI क्या है?

तो, आखिरकार, WSGI क्या है? डब्ल्यूएसजीआई नियमों का एक समूह है , जिसे दो हिस्सों में लिखा गया है। उन्हें इस तरह से लिखा जाता है कि उन्हें एकीकरण का स्वागत करने वाले किसी भी वातावरण में एकीकृत किया जा सकता है।

वेब सर्वर साइड के लिए लिखा गया पहला भाग कहता है, "ठीक है, अगर आप एक WSGI एप्लिकेशन से निपटना चाहते हैं, तो यहां पर लोड होने पर सॉफ्टवेयर कैसे सोच रहा होगा। यहां वो चीजें बताई गई हैं जो आपको एप्लिकेशन को उपलब्ध करानी चाहिए, और यहां। वह इंटरफ़ेस (लेआउट) है जिसके बारे में आप हर एप्लिकेशन से अपेक्षा कर सकते हैं। इसके अलावा, अगर कुछ भी गलत होता है, तो यहां बताया गया है कि ऐप कैसे सोच रहा है और आप इसे कैसे व्यवहार कर सकते हैं। "

पायथन एप्लिकेशन सॉफ़्टवेयर के लिए लिखा गया दूसरा भाग कहता है, "ठीक है, अगर आप एक WSGI सर्वर से निपटना चाहते हैं, तो यहां सर्वर कैसे सोच रहा होगा जब यह आपसे संपर्क करता है। यहां वे चीजें हैं जो आपको सर्वर को उपलब्ध कराना चाहिए, और यहाँ इंटरफ़ेस (लेआउट) है जिसे आप हर सर्वर से होने की उम्मीद कर सकते हैं। इसके अलावा, अगर कुछ भी गलत होता है, तो यहां आपको कैसे व्यवहार करना चाहिए और यहां आपको सर्वर को बताना चाहिए। "

तो आपके पास यह है - सर्वर सर्वर होगा और सॉफ्टवेयर सॉफ्टवेयर होगा, और यहां एक तरीका है कि वे बिना किसी महान को प्राप्त कर सकते हैं बिना दूसरे की बारीकियों के लिए कोई भत्ता बनाने के लिए। यह डब्ल्यूएसजीआई है।

mod_wsgi, दूसरी ओर, Apache के लिए एक प्लगइन है जो इसे WSGI- अनुरूप सॉफ़्टवेयर से बात करने देता है, दूसरे शब्दों में, mod_wsgi एक कार्यान्वयन है - Apache में - ऊपर नियम पुस्तिका के एक भाग के नियमों का।

CGI के लिए .... किसी और से पूछें :-)


21
इस उत्तर को "किसी और से पूछें" के साथ समाप्त होने के बजाय, मैं चाहता हूं कि कोई व्यक्ति इस उत्तर को उसी तरीके से शामिल करने के लिए संपादित करे।
ब्रूनो ब्रोंस्की

1
'सर्वर सर्वर होंगे और सॉफ्टवेयर सॉफ्टवेयर होंगे' - 'सर्वर मंगल से हैं और सॉफ्टवेयर वेनस से है' :)
राहुल

22

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


21

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

दूसरी ओर, WSGI, पायथन-विशिष्ट, थोड़ा उच्च-स्तरीय इंटरफ़ेस है जो प्रोग्रामर को ऐसे एप्लिकेशन लिखने की अनुमति देता है जो सर्वर-एग्नॉस्टिक हैं और जिन्हें अन्य WSGI एप्लिकेशन (मिडलवेयर) में लपेटा जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.