Erlang 21

mod_esi




erlang

mod_esi

मॉड्यूल

mod_esi

मॉड्यूल सारांश

एर्लांग सर्वर इंटरफ़ेस

विवरण

यह मॉड्यूल Erlang Server Interface (ESI) API को परिभाषित करता है। यह आपके Inets वेब सर्वर के लिए आम सीजीआई लिपियों के रूप में लिखने की तुलना में Inets लिपियों को लिखने का एक अधिक कुशल तरीका है।

जानकारी का प्रकार

निम्न डेटा प्रकार का उपयोग mod_esi के कार्यों में किया जाता है:

env() =

{EnvKey()::atom(), Value::term()}

वर्तमान में समर्थित मुख्य मूल्य जोड़े

{server_software, string()}

इनसेट संस्करण का संकेत देता है।

{server_name, string()}

स्थानीय होस्टनाम।

{gateway_interface, string()}

सीजीआई में लिगेसी स्ट्रिंग का इस्तेमाल किया जाता है।

{server_protocol, string()}

HTTP संस्करण, वर्तमान में "HTTP / 1.1"

{server_port, integer()}

सर्वर पोर्ट नंबर।

{request_method, "GET | "PUT" | "DELETE" | "POST" | "PATCH"}

HTTP अनुरोध विधि।

{remote_adress, inet:ip_address()}

ग्राहकों को आईपी पते।

{peer_cert, undefined | no_peercert | DER:binary()}

टीएलएस कनेक्शन के लिए जहां क्लाइंट सर्टिफिकेट का उपयोग किया जाता है, यह एक ASN.1 डीईआर-एन्कोडेड X509-सर्टिफिकेट एर्लैंग बाइनरी के रूप में होगा। यदि क्लाइंट प्रमाणपत्र का उपयोग नहीं किया जाता है तो मान no_peercert होगा, और यदि TLS का उपयोग नहीं किया जाता है (नेटवर्क विफलता के कारण HTTP या कनेक्शन खो जाता है) तो मान undefined हो जाएगा।

{script_name, string()}

URI का अनुरोध करें

{http_LowerCaseHTTPHeaderName, string()}

उदाहरण: {http_content_type, "text / html"}

निर्यात

वितरित (सत्र, डेटा) -> ठीक है | {त्रुटि, कारण}

प्रकार

यह फ़ंक्शन केवल उपयोगकर्ता को सामग्री के कुछ हिस्सों को वितरित करने के लिए एर्ल स्कीम इंटरफ़ेस द्वारा कहे जाने वाले कार्यों से उपयोग करने के लिए है।

एक Erl योजना स्क्रिप्ट से डेटा क्लाइंट को वापस भेजता है।

ध्यान दें

यदि कोई HTTP हेडर फ़ील्ड स्क्रिप्ट द्वारा जोड़े जाते हैं, तो उन्हें deliver/2 लिए पहली कॉल में होना चाहिए, और कॉल में डेटा एक स्ट्रिंग होना चाहिए। हेडर के पूरा होने के बाद कॉल ओवरहेड को कम करने के लिए बाइनरी डेटा हो सकते हैं। SessionID के डेटा प्रकार के बारे में कुछ भी न SessionID । आपके द्वारा कार्यान्वित ईएसआई कॉलबैक फ़ंक्शन को इनपुट के रूप में दिए गए SessionID को मान होना चाहिए।

ईएसआई कॉलबैक फ़ंक्शंस

निर्यात

मॉड्यूल: फ़ंक्शन (सत्र, एनव, इनपुट) -> {जारी रखें, राज्य} | _

प्रकार

Module कोड पथ में पाया जाना चाहिए और तीन की एक समानता के साथ Function को निर्यात करना चाहिए। वेब सर्वर के लिए कॉन्फ़िगरेशन फ़ाइल में एक erlScriptAlias भी सेट किया जाना चाहिए।

mod_esi:deliver/2 का उपयोग क्लाइंट के प्रति प्रतिक्रिया उत्पन्न करने के लिए किया जाएगा और SessionID एक पहचानकर्ता है जिसे इस फ़ंक्शन को कॉल करते समय उपयोग किया जाएगा, डेटाटाइप के बारे में कुछ भी नहीं मानें। प्रतिक्रिया डेटा को चैंकाने के लिए इस फ़ंक्शन को कई बार कहा जा सकता है। ध्यान दें कि क्लाइंट को भेजे गए डेटा का पहला हिस्सा कम से कम सभी HTTP हेडर फ़ील्ड में होना चाहिए जो प्रतिक्रिया उत्पन्न करेगा। यदि पहले चंक में HTTP हैडर का अंत नहीं है, अर्थात, "\r\n\r\n", सर्वर मानता है कि कोई HTTP हेडर फ़ील्ड उत्पन्न नहीं होगा।

अनुरोध के Env पर्यावरण डेटा ऊपर विवरण देखें।

Input GET अनुरोध या PUT या POST अनुरोध के मुख्य भाग का डेटा है। शरीर को वितरित करने के लिए डिफ़ॉल्ट व्यवहार (विरासत के कारण), यह है कि पूरे शरीर को इकट्ठा किया जाता है और एक स्ट्रिंग में परिवर्तित किया जाता है। लेकिन यदि httpd config पैरामीटर max_client_body_chunk सेट है, तो शरीर को बाइनरी max_client_body_chunk रूप में वितरित किया जाएगा। max_client_body_chunk का अधिकतम आकार या तो max_client_body_chunk या क्लाइंट द्वारा तय किया जाता है कि क्या यह शरीर को भेजने के लिए HTTP chunked एन्कोडिंग का उपयोग करता है। चैंकिंग तंत्र का उपयोग करते समय इस कॉलबैक को सभी कॉल के लिए {जारी रखें, राज्य :: शब्द ()} पर वापस आना होगा जहां Input {first, Data::binary()} या {continue, Data::binary(), State::term()} । जब Input {last, Data::binary(), State::term()} रिटर्न वैल्यू को नजरअंदाज कर दिया जाएगा।

ध्यान दें

ध्यान दें कि यदि शरीर छोटा है, तो सभी डेटा को केवल एक ही चंक में दिया जा सकता है और फिर कॉलबैक {first, Data::binary()} साथ कॉल किए बिना {अंतिम, डेटा :: बाइनरी (अपरिभाषित), के साथ कॉल किया जाएगा। ।

इनपुट State अंतिम रिटर्न State , इसमें कॉलबैक में किसी भी डेटा को शामिल किया जा सकता है, जिसे चंक्स को हैंडल करते समय ट्रैक करने की आवश्यकता होती है।

मॉड्यूल: फ़ंक्शन (Env, इनपुट) -> प्रतिक्रिया

प्रकार

यह कॉलबैक प्रारूप बहुत अधिक मेमोरी का उपभोग करता है, क्योंकि उपयोगकर्ता को भेजे जाने से पहले पूरी प्रतिक्रिया उत्पन्न होनी चाहिए। यह कॉलबैक प्रारूप हटा दिया गया है। नए विकास के लिए, Module:Function/3 उपयोग करें Module:Function/3