2010-07-09 7 views
16

मैं रूबी पर रूबी के संदर्भ में अक्सर 'मिडलवेयर' शब्द सुनता हूं। यह वास्तव में क्या है क्या आप विशिष्ट उदाहरण प्रदान कर सकते हैं?रूबी पर रूबी के संदर्भ में संदर्भित होने पर मिडलवेयर क्या है?

उत्तर

29

मिडिलवेयर वेब अनुप्रयोगों के लिए रैक के लिए, मानक रूबी एपीआई संबंधित है। के बाद से रेल अनुप्रयोगों इन दिनों रैक अनुप्रयोगों रहे हैं, वे दोनों के लिए लागू होते हैं।

रैक मिडलवेयर जैसे आपका रेल आवेदन के रूप में आवेदन सर्वर (Webrick, पतला, यूनिकॉर्न, यात्री, ...) और वास्तविक आवेदन, के बीच सब कुछ है। यह वेब अनुप्रयोग सर्वर और एप्लिकेशन के बीच pipeline है।

एक रैक आवेदन करने के लिए इनपुट एक "वातावरण" जो सभी HTTP अनुरोध विवरण (और अधिक) शामिल हैं। आउटपुट एक HTTP प्रतिक्रिया है। मिडलवेयर परतें फ़िल्टर की तरह हैं जो इनपुट, आउटपुट या दोनों को संशोधित कर सकती है। रेल implement some of its features (क्वेरी कैशिंग, कुकी स्टोर, http विधि विस्तार) में मिडलवेयर का उपयोग करते हैं, लेकिन आप अपना खुद का जोड़ सकते हैं।

रैक मिडलवेयर वेब अनुप्रयोगों कि रैक का उपयोग, अंतर्निहित ढांचे की परवाह किए बिना भर में सरल वेब से संबंधित व्यवहार का पुन: उपयोग करने के लिए एक प्रभावी तरीका है। आपके आवेदन का एक हिस्सा कार्यक्षमता जोड़ता है, लेकिन एक HTTP प्रतिक्रिया लिए ज़िम्मेदार नहीं है, तो यह रैक मिडलवेयर के रूप में उत्तीर्ण।

बातों के कुछ उदाहरण आप Rack middleware के रूप में लागू कर सकता है शामिल हैं:

  • HTTPS संचय (सर्वर साइड और क्लाइंट साइड)
  • लॉगिंग
  • प्रमाणीकरण
  • निगरानी
  • HTTP
  • छानने हैडर

देखें this SO question भी। एक वर्ष 4 साल के लिए

0

CodeRack पर नज़र रखने से कुछ संभावनाएं समझने में सहायता मिल सकती है। अब जब आप पूछते हैं कि आप रूबी पर रूबी के संदर्भ में अक्सर इसके बारे में सुनते हैं, तो क्या आप आमतौर पर पूछ रहे हैं कि मिडलवेयर क्या है?

3

कल्पना कीजिए कि आप एक कैशिंग सेवा बनाना चाहते हैं। यह कैशिंग सेवा ऐप-अज्ञेयवादी होगी ताकि आप इसे कई अनुप्रयोगों के साथ उपयोग कर सकें। आप कई अलग-अलग वेब सर्वरों का भी समर्थन करना चाहते हैं।

ध्यान दें कि यह सर्वर और ढांचे के बीच बीच में कैसे बैठता है? यह मिडलवेयर का एक उदाहरण है। यह एप्लिकेशन तर्क नहीं है और वास्तव में निम्न स्तर की नेटवर्क सामग्री नहीं है बल्कि बीच में कहीं भी एक सेवा प्रदान करता है। कुछ उदाहरण क्यूओएस (सेवा की गुणवत्ता), सुरक्षा, कैशिंग, रहे हैं ...

यह अच्छा होगा यदि आपकी सेवा सभी n लोकप्रिय की (और नहीं-तो-लोकप्रिय में से कुछ) सर्वरों का समर्थन किया होगा (पतली , Webrick)। यदि आपने उन्हें समर्थन दिया है तो सभी लोग आपके अद्भुत सॉफ्टवेयर का उपयोग कर सकते हैं। आप देख सकते हैं कि ऐसा करने से एक वास्तविक ड्रैग होगा, आपको प्रत्येक सर्वर को विशेष सर्वर-विशिष्ट कोड के साथ समर्थन करने की आवश्यकता होगी।

अब यह केवल आधे समस्या है क्योंकि कई वेब ढांचे भी हैं। रेल 500-एलबी गोरिल्ला है लेकिन मेरब और Sinatra जैसे अन्य ढांचे हैं। आपकी कैशिंग सेवा में इन्हें समर्थन देना मीटर समर्थन करने के लिए अलग-अलग चीजें हैं। अब आप एन एक्स एम विभिन्न पथों का समर्थन कर रहे हैं। क्या घसीटा है।

Rack दर्ज करें। रैक ढांचे और सर्वर के बीच बैठता है और आपको अपने कैशिंग सर्वर को कोड करने के लिए एक इंटरफ़ेस देता है। यदि सर्वर और फ्रेमवर्क रैक का समर्थन करते हैं, और अधिकतर करते हैं, तो आपकी सेवा को केवल रैक इंटरफ़ेस का समर्थन करने की आवश्यकता होती है और आपको सभी ढांचे और सेवाओं के समर्थन के लिए समर्थन मिलता है। (यह देवी से संकलित लेटेक्स की तरह थोड़ा है और फिर डीवी को पीएस, पीडीएफ, में बदल रहा है ....)। आपको मेरब से वेबब्रिक और सिनाटा से थिन तक कनवर्टर की आवश्यकता नहीं है। यदि आपकी कैशिंग सेवा रैक का समर्थन करती है तो आप मतभेदों से इन्सुलेट कर रहे हैं।

इस "संकीर्ण कमर" के साथ, जहां एम-फ्रेमवर्क सभी ऐप और सर्वर के बीच एन-सर्वर पर ब्रांच करने से पहले एक साथ आते हैं, आप यह भी देख सकते हैं कि यह रूटिंग, लॉगिंग, स्थिर जैसे कार्यक्षमता जोड़ने के लिए एक अच्छी जगह कैसे प्रदान करता है सेवा जो आपके व्याख्या किए गए ढांचे की धीमी गति से गुजरती है, आदि

+1

रैक बिल्कुल मिडलवेयर नहीं है, यह एक साधारण इंटरफ़ेस है जो सर्वर और वेब एप्लिकेशन के बीच आसान संचार की सुविधा प्रदान करता है। रैक मिडलवेयर के लिए अनुमति देता है, लेकिन यह खुद ही नहीं है। –

+0

अपनी टिप्पणियों को संबोधित किया। धन्यवाद। –

1

रेल मिडलवेयर आपको रेल तक पहुंचने से पहले अनुरोध या प्रतिक्रिया पकड़ने और इसे संशोधित करने की अनुमति देता है। (आप रैक और रेल के बीच मध्य में हैं)। उदाहरण के लिए, आप प्रत्येक प्रतिक्रिया ले सकते हैं जो "छवि/पीएनजी" माइम-प्रकार देता है, और इसे रैक पर सेवा देने के लिए इसे जाने से पहले वॉटरमार्क जोड़ता है। या आप उन अनुरोधों को फ़िल्टर कर सकते हैं जिन्हें आप किसी कारण से पसंद नहीं करते हैं (अनधिकृत, शीर्षलेख नहीं है) और उन्हें कभी भी रेलों को हिट नहीं करने दें। या आप इसे रेलवे पर पास करने से पहले आने वाले अनुरोध में हेडर जोड़ सकते हैं। या फिर आप प्रतिक्रिया रेल से आ रही ले जा सकते हैं, और अगर यह "text/html" आप एचटीएमएल सेक कर सकते हैं (, सफेद स्थान को निकालना आदि) उत्पादन के लिए पर पारित करने से पहले। (मैं http://github.com/maxim/html_press में यह के साथ प्रयोग किया गया था)

इन छोटी क्षुधा बहुत सारे हैं और "मिडलवेयर" के रूप में में खामियों को दूर कर रहे हैं।

1

स्पष्टीकरण: "Chinese whispers" है कि आप एक बच्चे के रूप में खेला:

आप खेल याद है? (कोई नस्लवाद इरादा नहीं था - वास्तव में यह था कि खेल को मेरे दिन में क्या कहा जाता था)। आप अपने दोस्त को बताना चाहते हैं - जो लाइन के दूसरे छोर पर बैठता है, एक विशेष संदेश। लेकिन आप उसे सीधे नहीं बता सकते हैं: आपको अपना संदेश व्यक्तिगत रूप से तब तक पारित करना होगा जब तक वह अंततः उसके पास न पहुंच जाए।

लेकिन अधिक बार नहीं है कि आप उस संदेश में परिवर्तन होने के रूप में यह श्रृंखला के माध्यम से चला जाता है, जब तक यह अंत बिंदु तक पहुँच जाता है मिल जाएगा।

  1. उत्पन्नकर्ता: उदाहरण के लिए: "तुम हमेशा दिन है कि आप लगभग कैप्टन जैक स्पैरो पकड़ा के रूप में यह याद रखना होगा।"
  2. व्यक्ति 1 - पर गुजरता है: "आप हमेशा दिन याद होगा कि आप लगभग कैप्टन जैक स्पैरो पकड़ा "
  3. व्यक्ति 2 - पर गुजरता है:"।। -: आप दिन आप कप्तान जैक पकड़ा याद होगा "पर गुजरता
  4. व्यक्ति 3" तुम हमेशा दिन है कि आप लगभग कैप्टन जैक स्पैरो पकड़ा याद होगा गौरैया। "
  5. पे रसन 4 - इस पर गुजरता है: "आपको कप्तान जैक स्पैरो याद आएगा।"
  6. अंतिम संदेश प्राप्त किया:" याद रखें "

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

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