पर्ल ऑब्जेक्ट एनवायरनमेंट


 * मैक संस्करण के लिए, मैक (कर्नेल) देखें

'पर्ल ऑब्जेक्ट एनवायरनमेंट' या 'पीओई' रोक्को कैपुटो एट अल द्वारा पर्ल प्रोग्रामिंग भाषा में लिखी गई पर्ल मॉड्यूल की एक लाइब्रेरी (कंप्यूटिंग) है।

सीपीएएन से:
 * POE मूल रूप से एक सतत ऑब्जेक्ट सर्वर और रनटाइम वातावरण के मूल के रूप में विकसित किया गया था। यह एक सामान्य प्रयोजन मल्टीटास्किंग और नेटवर्किंग फ्रेमवर्क के रूप में विकसित हुआ है, जो इवेंट और टीके (सॉफ़्टवेयर) और जीटीके टूलकिट जैसे अन्य इवेंट प्रोग्राम लूप्स को शामिल करता है और एक सुसंगत इंटरफ़ेस प्रदान करता है।

पीओई वास्तुकला: अमूर्तता की परतें
पीओई, पर्ल ऑब्जेक्ट एनवायरनमेंट को एक छोटे मॉड्यूलर ऑपरेटिंग सिस्टम के रूप में सोचा जा सकता है। एक या अधिक POE प्रोग्राम या इंस्टेंसेस एक साथ चलाए जा सकते हैं और आम तौर पर सहकारी मल्टीटास्किंग के लिए उपयुक्त होते हैं। पीओई पैकेज में नाम स्थान और एब्स्ट्रैक्शन (कंप्यूटर विज्ञान) शामिल हैं जो ओपन-एंडेड सीपीएएन|सीपीएएन-शैली सम्मेलन में पीओई के भविष्य के विकास का मार्गदर्शन करते हैं।

घटना परत
अनौपचारिक वास्तुकला में नीचे की तरफ कर्नेल (ऑपरेटिंग सिस्टम) के साथ परतों का एक सेट होता है। यह छोटा कर्नेल ईवेंट परत का प्रतिनिधित्व करता है जो प्रत्येक चल रहे POE उदाहरण के मुख्य लूप के रूप में कार्य करता है। पहली कॉल इवेंट डिस्पैचर - POE::Kernel को है।

POE::कर्नेल नेमस्पेस में फ़ंक्शंस का एक सूट होता है जो कर्नेल में ही प्लग किया जाता है। ये लूप एब्स्ट्रैक्शन POE के मानकीकृत इवेंट लूप ब्रिज इंटरफ़ेस - POE::लूप के बाद डिज़ाइन किए गए हैं। इन्हें रनटाइम सेवाएं और इंटरप्रोसेस संचार के लिए एक आसान सुविधा प्रदान करने के लिए आवश्यकतानुसार मिश्रित और मिलान किया जा सकता है। मूल कार्य POE::Loop::Event, POE::Loop::Poll और POE::Loop::Select हैं। POE::Loop::Tk और POE::Loop::Gtk भी उपलब्ध हैं जो बाहरी वातावरण में अन्य लूप ब्रिजों में हुक प्रदान करते हैं। यदि यह पर्याप्त नहीं है, तो POE::लूप कर्नेल एब्स्ट्रैक्शन पुन: प्रयोज्य सिग्नल कॉलबैक, समय या अलार्म कॉलबैक, और फ़ाइलहैंडल गतिविधि कॉलबैक के साथ-साथ इवेंट लूप को आरंभ करने, निष्पादित करने और अंतिम रूप देने जैसे प्रशासनिक कार्य प्रदान करता है।

एक उच्च स्तरीय पैकेजिंग ढांचा भी है - POE::मैक्रो और उनके परीक्षण के लिए एक डिबगिंग उपयोगिता जिसे POE::Preprocessor कहा जाता है। इस ढांचे से POE::Macro::UseBytes प्राप्त हुआ है।


 * नोट: जैसा कि पर्ल परंपरा का आदेश है, पीओई भी एक गतिशील लक्ष्य है।

यह देखने के लिए हमेशा सीपीएएन जांचें कि समुदाय ने संग्रह में कौन सी नई चीज़ें रखी हैं। (...और पर्ल का आदर्श वाक्य याद रखें: लैरी वॉल के अनुसार इसे करने का एक से अधिक तरीका है)

रनिंग कर्नेल POE::सेशन आर्किटेक्चर द्वारा शासित अमूर्तता के दूसरे सेट से निर्मित प्राइमर्डियल परिमित-राज्य मशीनों के माध्यम से संचालित होता है। एक POE::Session को लगभग तुच्छ रूप से फ़ंक्शंस, क्लास विधि (कंप्यूटर प्रोग्रामिंग), और/या ऑब्जेक्ट मेथड जो उन्हें संभालते हैं, के इवेंट मैप के रूप में परिभाषित किया गया है। POE::सत्र ऑब्जेक्ट में इसके सभी आयोजन प्रबंधकर्ता द्वारा साझा किया गया एक स्टोरेज स्पेस भी होता है, जिसे ढेर (प्रोग्रामिंग) कहा जाता है। आप उन्हें किसी भी तरह से काट लें, राज्य ठोस रूप से पहचाने जाते हैं और स्पष्ट रूप से परिभाषित होते हैं।

एक अधिक विशिष्ट इवेंट हैंडलर एक POE::Session उपवर्ग है जिसे POE::NFA कहा जाता है - एक इवेंट-संचालित नॉनडेटर्मिनिस्टिक परिमित ऑटोमेटन (एक स्मार्ट परिमित राज्य मशीन)। यह ईवेंट हैंडलर ईवेंट, पोल, उपयोगकर्ता चयन या अन्य बाहरी ईवेंट की आवश्यकता के अनुसार एक कड़ाई से परिभाषित स्थिति से दूसरे में चला जाता है। यह परिमित-राज्य मशीन सामान्य इवेंट-संचालित प्रोग्रामिंग थ्रेड (कंप्यूटिंग) की एक विस्तृत श्रृंखला को समाहित करने का काम करती है, जो अपेक्षाकृत अनौपचारिक POE::Session की तुलना में निष्पादन पथ पर अधिक सख्त ट्रैकिंग की अनुमति देती है।

आई/ओ परत
कर्नेल की अगली आवश्यकता इनपुट-आउटपुट हैंडलर के लिए है जो व्हील्स नामक एकल I/O परत में मौजूद होते हैं। पहिए कार्रवाई शुरू करते हैं, उनके परिणामस्वरूप निम्न-स्तरीय घटनाओं को संभालते हैं, और उनका उपयोग करने वाले सत्रों के लिए उच्च-स्तरीय घटनाओं का उत्पादन करते हैं। सेशन और लूप्स की तरह पहिये, अमूर्त तत्वों के एक समान सेट से निर्मित होते हैं - 'पीओई::व्हील' - जो कर्नेल के शीर्ष पर स्थित होते हैं। POE के आधार वितरण में सात अत्यधिक विशिष्ट और अच्छी तरह से परिभाषित पहिये हैं:
 * POE::Wheel::Run - पाइप, fork और कभी-कभी exec का उपयोग करके बाल प्रक्रियाओं को बनाता है और उनके साथ इंटरैक्ट करता है। बातचीत बच्चे के मानक इनपुट और आउटपुट के माध्यम से की जाती है।
 * POE::Wheel::SocketFactory - क्लाइंट और सर्वर सॉकेट को उनकी स्थापना की प्रतीक्षा किए बिना बनाने का एक तरीका।
 * POE::Wheel::Curses - कर्सेस (प्रोग्रामिंग लाइब्रेरी) टेक्स्ट इंटरफ़ेस लाइब्रेरी से नॉन-ब्लॉकिंग इनपुट के लिए एक हैंडलर। सीपीएएन घटक जैसे कि कर्स::यूआई::पीओई और टर्म::विज़ुअल इस पर आधारित हैं।
 * पीओई::व्हील::फॉलोटेल - लगातार बढ़ती फ़ाइल, जैसे लॉग या सहयोगी दस्तावेज़, को उसकी पूंछ पर एक हैंडल रखकर ट्रैक करता है।
 * POE::Wheel::ListenAccept - POE::Wheel::SocketFactory का एक सबसेट जिसका उपयोग मौजूदा सर्वर सॉकेट पर सुनने और दूरस्थ क्लाइंट से कनेक्शन स्वीकार करने के लिए किया जाता है।
 * POE::Wheel::ReadLine - एक नॉन-ब्लॉकिंग, इवेंट संचालित टर्म::ReadLine का एनालॉग।
 * POE::Wheel::ReadWrite - POE के लिए एक उच्च-प्रदर्शन अतुल्यकालिक I/O फ़ाइल हैंडलर जो POE के डिवाइस ड्राइवर और फ़िल्टर (सॉफ़्टवेयर) का उपयोग 'फ़ाइलहैंडल' पर बफ़र्ड पढ़ने और लिखने के लिए करता है जो अगली परत पर आता है - POE's स्वयं की छोटी फ़ाइल प्रणाली।

फ़ाइल परतें
ड्राइवर फ़ाइल हैंडल को पढ़ने और लिखने का वास्तविक कार्य करते हैं। वे POE::Driver मॉड्यूल में निहित कम अमूर्त परिभाषाओं के अनुसार बनाए गए हैं। इस लेखन के समय लागू किया गया मुख्य ड्राइवर POE::Driver::SysRW है - एक सार्वभौमिक फ़ाइलहैंडल रीडर/लेखक जो विशेष रूप से POE::Wheel::ReadWrite के लिए डिज़ाइन किया गया है।

अगली परत, POE::Filter से निर्मित और संभवत: अधिकांश पर्ल ऑबफस्केशन एफिशियानाडोस का फोकस (नीचे POE #POE हास्य देखें), POE::Filter सेट है: फ़िल्टर कच्ची धाराओं के बीच अनुवाद करते हैं और स्वादिष्ट दादा के पके हुए टुकड़े। प्रति मैट कैशनर|`सुंगो'
 * POE::Filter::Block - इनपुट को निश्चित लंबाई वाले ब्लॉक के रूप में पार्स करता है। आउटपुट पक्ष पर, यह केवल डेटा को बिना किसी क्षति के पास करता है।
 * POE::Filter::HTTPD - इनपुट को HTTP अनुरोधों के रूप में पार्स करता है और उन्हें HTTP::Request ऑब्जेक्ट में अनुवादित करता है। आउटपुट पक्ष पर, यह HTTP::Response ऑब्जेक्ट लेता है और उन्हें वेब क्लाइंट/उपयोगकर्ता-एजेंट को भेजे जाने के लिए उपयुक्त चीज़ में बदल देता है।
 * POE::Filter::Line - आने वाली स्ट्रीम को लाइनों में पार्स करता है और आउटगोइंग लाइनों को स्ट्रीम में बदल देता है। यह बहुत बुनियादी हुआ करता था, लेकिन हाल के सुधारों में न्यूलाइन ऑटोडिटेक्शन जैसी दिलचस्प सुविधाएँ जोड़ी गई हैं।
 * POE::Filter::Reference - POE प्रोग्रामों के बीच या POE और अन्य पर्ल प्रोग्रामों के बीच पर्ल संरचनाएं भेजने के लिए उपयोग किया जाता है। इनपुट पक्ष पर, जमे हुए डेटा (स्टोरेबल, फ्रीज़थॉ, वाईएएमएल, या कुछ अन्य क्रमबद्धता तंत्र के माध्यम से) को पर्ल डेटा संरचनाओं में पिघलाया जाता है। आउटपुट पर, फ़िल्टर को दिए गए संदर्भ फ़्रीज़ हो जाते हैं। यदि Compress::Zlib स्थापित है तो अनुरोध पर डेटा को संपीड़ित भी किया जा सकता है।
 * POE::फ़िल्टर::स्ट्रीम - कुछ नहीं करता। यह बिना किसी बदलाव के केवल डेटा को पास करता है।

पूरी सूची के लिए POE at CPAN देखें

POE घटक
POE::घटक दस्तावेज़ीकरण के अनुसार POE में कई बड़े मॉड्यूलर प्रोग्रामिंग लिखे गए हैं। ये इवेंट-संचालित मॉड्यूल हैं, जिनमें से कई छोटे डेमॉन (कंप्यूटिंग) के रूप में कार्य करते हैं जो बड़े पैकेजों को सेवाएं प्रदान करते हैं जिनसे वे संबंधित हैं। उनमें से कुछ मॉड्यूल के बीच उच्च-स्तरीय संचार की सुविधा प्रदान करते हैं, विशेष रूप से स्टैंड-अलोन एप्लिकेशन जिन्हें पर्ल के मुख्य वितरण से स्वतंत्र रहने की आवश्यकता होती है।

सामान्य तौर पर, पीओई घटक तैयार उच्च स्तरीय प्रक्रियाएं हैं जो विशिष्ट बड़े कार्य करते हैं। कुछ उदाहरण:

पीओई घटक अत्यधिक पुन: प्रयोज्य पुस्तकालय होते हैं जो कठिन कार्यों को संभालते हैं, प्रोग्रामर को अधिक दिलचस्प चीज़ों पर ध्यान केंद्रित करने के लिए स्वतंत्र करना। हालाँकि, यह किसी भी पुस्तकालय के लिए सच होना चाहिए।
 * घटक::सर्वर::टीसीपी - एक विशेष प्रयोजन टीसीपी सर्वलेट
 * घटक::क्लाइंट::टीसीपी - एक पीओई-जागरूक टीसीपी क्लाइंट
 * पीओई::घटक::आईआरसी - लगभग पूर्ण विशेषताओं वाला आईआरसी क्लाइंट।
 * POE::Component::Server::IRC - एक RFC 2810 से RFC 2813 अनुरूप IRC सर्वर (विकासाधीन)
 * POE::Component::UserBase - एक उपयोगकर्ता प्रमाणीकरण और डेटा दृढ़ता सर्वलेट।

POE हास्य

 * CPAN पर Acme::POE::घुटना मॉड्यूल।
 * पीओई क्या है के अंत में कई मूर्खतापूर्ण संक्षिप्तीकरण विस्तार।

यह भी देखें

 * इवेंट-संचालित प्रोग्रामिंग
 * ट्विस्टेड (सॉफ्टवेयर), पायथन (प्रोग्रामिंग भाषा) के लिए एक तुलनीय ढांचा

बाहरी संबंध

 * POE Home Page (a Wiki site)