Erlang 21

gen_server




erlang

gen_server

मॉड्यूल

gen_server

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

सामान्य सर्वर व्यवहार।

विवरण

यह व्यवहार मॉड्यूल क्लाइंट-सर्वर रिलेशन का सर्वर प्रदान करता है। इस मॉड्यूल का उपयोग करके कार्यान्वित एक सामान्य सर्वर प्रक्रिया ( gen_server ) में इंटरफ़ेस फ़ंक्शंस का एक मानक सेट होता है और इसमें ट्रेसिंग और त्रुटि रिपोर्टिंग के लिए कार्यक्षमता शामिल होती है। यह एक ओटीपी पर्यवेक्षण वृक्ष में भी फिट बैठता है। अधिक जानकारी के लिए, OTP डिजाइन सिद्धांतों में अनुभाग gen_server Behaviour देखें।

एक gen_server प्रक्रिया सभी विशिष्ट भागों को कॉलबैक मॉड्यूल में स्थित मानती है जो कार्यों के पूर्वनिर्धारित सेट का निर्यात करते हैं। व्यवहार कार्यों और कॉलबैक फ़ंक्शन के बीच संबंध निम्नानुसार है:

gen_server module            Callback module
-----------------            ---------------
gen_server:start
gen_server:start_link -----> Module:init/1

gen_server:stop       -----> Module:terminate/2

gen_server:call
gen_server:multi_call -----> Module:handle_call/3

gen_server:cast
gen_server:abcast     -----> Module:handle_cast/2

-                     -----> Module:handle_info/2

-                     -----> Module:handle_continue/2

-                     -----> Module:terminate/2

-                     -----> Module:code_change/3

यदि कॉलबैक फ़ंक्शन विफल हो जाता है या खराब मान लौटाता है, तो gen_server प्रक्रिया समाप्त हो जाती है।

एक gen_server प्रक्रिया sys(3) में वर्णित सिस्टम संदेशों को संभालती है। sys मॉड्यूल का उपयोग एक gen_server प्रक्रिया को डीबग करने के लिए किया जा सकता है।

ध्यान दें कि एक gen_server प्रक्रिया स्वचालित रूप से निकास संकेतों को नहीं gen_server है, इसे कॉलबैक मॉड्यूल में स्पष्ट रूप से शुरू किया जाना चाहिए।

जब तक अन्यथा कहा न जाए, इस मॉड्यूल में सभी कार्य विफल हो जाते हैं यदि निर्दिष्ट gen_server प्रक्रिया मौजूद नहीं है या यदि खराब तर्क निर्दिष्ट हैं।

अगर कॉलबैक फ़ंक्शन एक टाइम-आउट मान के बजाय 'hibernate' निर्दिष्ट करता है, तो gen_server प्रक्रिया हाइबरनेशन ( erlang:hibernate/3 ) में जा सकती है। यह तब उपयोगी हो सकता है जब सर्वर लंबे समय तक निष्क्रिय रहने की उम्मीद हो। हालाँकि, इस सुविधा का उपयोग सावधानी से करें, क्योंकि हाइबरनेशन से तात्पर्य कम से कम दो कचरा संग्रहण से है (जब हाइबरनेट हो रहा है और कुछ देर बाद जागने के बाद) और वह नहीं है जिसे आप व्यस्त सर्वर के लिए प्रत्येक कॉल के बीच करना चाहते हैं।

यदि gen_server प्रक्रिया को आरंभीकरण के तुरंत बाद कार्रवाई करने या कॉलबैक के निष्पादन को कई चरणों में तोड़ने की आवश्यकता है, तो यह समय-आउट या हाइबरनेशन मान के स्थान पर {continue,Continue} वापस कर सकता है, जो तुरंत handle_continue/2 आमंत्रित करेगा handle_continue/2 कॉलबैक।

निर्यात

abcast (नाम, अनुरोध) -> abcast
abcast (नोड्स, नाम, अनुरोध) -> abcast

प्रकार

निर्दिष्ट नोड्स में स्थानीय रूप से पंजीकृत gen_server प्रक्रियाओं के लिए एक अतुल्यकालिक अनुरोध भेजता है। फ़ंक्शन तुरंत लौटता है और उन नोड्स की उपेक्षा करता है जो मौजूद नहीं हैं, या जहां gen_server Name मौजूद नहीं है। अनुरोध को संभालने के लिए gen_server प्रोसेस Module:handle_cast/2 कॉल करता है Module:handle_cast/2

तर्कों के विवरण के लिए, multi_call/2,3,4 देखें।

कॉल (ServerRef, अनुरोध) -> जवाब दें
कॉल (ServerRef, रिक्वेस्ट, टाइमआउट) -> जवाब दें

प्रकार

अनुरोध भेजने और जब तक कोई जवाब नहीं आता है, तब तक प्रतीक्षा और प्रतीक्षा करके gen_server प्रक्रिया के ServerRef के लिए एक तुल्यकालिक कॉल करता है। अनुरोध को संभालने के लिए gen_server प्रक्रिया Module:handle_call/3 कॉल करती है Module:handle_call/3

ServerRef निम्न में से कोई भी हो सकता है:

  • पिद
  • Name , अगर gen_server प्रक्रिया स्थानीय रूप से पंजीकृत है
  • {Name,Node} , यदि gen_server प्रक्रिया स्थानीय रूप से दूसरे नोड पर पंजीकृत है
  • {global,GlobalName} , अगर gen_server प्रक्रिया विश्व स्तर पर पंजीकृत है
  • {via,Module,ViaName} , अगर gen_server प्रक्रिया एक वैकल्पिक प्रक्रिया रजिस्ट्री के माध्यम से पंजीकृत है

Request कोई भी शब्द है जिसे Module:handle_call/3 के तर्कों में से एक के रूप में पारित किया गया है Module:handle_call/3

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

वापसी का मान Reply Module:handle_call/3 के वापसी मूल्य में परिभाषित किया गया है Module:handle_call/3

कॉल कई कारणों से विफल हो सकता है, जिसमें टाइम-आउट और कॉल के दौरान या उसके दौरान मरने वाले gen_server प्रक्रिया शामिल है।

कास्ट (ServerRef, रिक्वेस्ट) -> ठीक है

प्रकार

यदि गंतव्य नोड या gen_server प्रक्रिया मौजूद नहीं है, तो अनदेखा करते हुए, gen_server प्रक्रिया के ServerRef के लिए एक अतुल्यकालिक अनुरोध भेजता है और तुरंत वापस लौट आता है। अनुरोध को संभालने के लिए gen_server प्रक्रिया Module:handle_cast/2 कॉल करती है Module:handle_cast/2

ServerRef विवरण के लिए, call/2,3 देखें।

Request कोई भी शब्द है जो Module:handle_cast/2 के तर्कों में से एक के रूप में पारित किया गया है Module:handle_cast/2

enter_loop (मॉड्यूल, विकल्प, राज्य)
enter_loop (मॉड्यूल, विकल्प, राज्य, सर्वर नाम)
enter_loop (मॉड्यूल, विकल्प, स्थिति, समय समाप्त)
enter_loop (मॉड्यूल, विकल्प, स्थिति, सर्वर नाम, समय समाप्त)

प्रकार

एक मौजूदा प्रक्रिया को एक gen_server प्रक्रिया में बनाता है। वापस नहीं आता है, इसके बजाय कॉलिंग प्रक्रिया gen_server प्रक्रिया में प्रवेश करती है और लूप प्राप्त करती है और एक gen_server प्रक्रिया बन जाती है। यह प्रक्रिया proc_lib(3) में प्रारंभ कार्यों में से एक का उपयोग करके शुरू की गई proc_lib(3) । उपयोगकर्ता प्रक्रिया के किसी भी आरंभीकरण के लिए जिम्मेदार है, जिसमें इसके लिए नाम दर्ज करना भी शामिल है।

यह फ़ंक्शन उपयोगी है जब gen_server प्रक्रिया व्यवहार प्रदान करता है की तुलना में अधिक जटिल प्रारंभ प्रक्रिया आवश्यक है।

Module , Options , और ServerName का एक ही अर्थ है जब कॉलिंग start[_link]/3,4 । हालाँकि, अगर ServerName निर्दिष्ट किया गया है, तो इस फ़ंक्शन को कॉल करने से पहले प्रक्रिया को तदनुसार पंजीकृत किया जाना चाहिए।

State और Timeout का एक ही अर्थ है जैसे Module:init/1 का रिटर्न मान Module:init/1 । कॉलबैक मॉड्यूल Module को init/1 फ़ंक्शन को निर्यात करने की आवश्यकता नहीं है।

फ़ंक्शन विफल हो जाता है यदि कॉलिंग प्रक्रिया एक proc_lib प्रारंभ फ़ंक्शन द्वारा शुरू नहीं की गई थी, या यदि यह ServerName अनुसार पंजीकृत नहीं है।

multi_call (नाम, अनुरोध) -> परिणाम
multi_call (नोड्स, नाम, अनुरोध) -> परिणाम
multi_call (नोड्स, नाम, अनुरोध, टाइमआउट) -> परिणाम

प्रकार

स्थानीय रूप से पंजीकृत सभी gen_server प्रक्रियाओं के लिए एक तुल्यकालिक कॉल करता है gen_server Name निर्दिष्ट नोड्स में पहले प्रत्येक नोड को अनुरोध भेजकर दिया जाता है और फिर उत्तरों की प्रतीक्षा की जाती है। अनुरोध को संभालने के लिए gen_server प्रक्रिया Module:handle_call/3 कॉल करती है Module:handle_call/3

यह फ़ंक्शन एक टपल {Replies,BadNodes} , जहां {Node,Reply} की एक सूची है और BadNodes नोड की एक सूची है जो या तो मौजूद नहीं थी, या जहां gen_server Name मौजूद नहीं था या उत्तर नहीं था।

Nodes नोड नामों की एक सूची है जिसमें अनुरोध भेजा जाना है। डिफ़ॉल्ट मान सभी ज्ञात नोड्स [node()|nodes()]

Name प्रत्येक gen_server प्रक्रिया का स्थानीय रूप से पंजीकृत नाम है।

Request कोई भी शब्द है जिसे Module:handle_call/3 के तर्कों में से एक के रूप में पारित किया गया है Module:handle_call/3

Timeout शून्य से अधिक पूर्णांक है जो निर्दिष्ट करता है कि प्रत्येक उत्तर के लिए कितने मिलीसेकंड या अनिश्चितता के लिए प्रतीक्षा करने के लिए परमाणु infinity है। infinity । यदि निर्दिष्ट समय के भीतर नोड से कोई उत्तर प्राप्त नहीं होता है, तो नोड को BadNodes जोड़ा जाता है।

जब एक उत्तर नोड में gen_server प्रक्रिया से Reply प्राप्त होता है, तो {Node,Reply} को gen_server में जोड़ा जाता है। Reply को Module:handle_call/3 के रिटर्न मान में परिभाषित किया गया है Module:handle_call/3

चेतावनी

यदि नोड्स में से कोई भी मॉनिटर की प्रक्रिया नहीं कर सकता है, उदाहरण के लिए, C या Java नोड्स, और gen_server प्रक्रिया शुरू नहीं होती है जब अनुरोध भेजे जाते हैं, लेकिन 2 सेकंड के भीतर शुरू होता है, यह फ़ंक्शन पूरे Timeout इंतजार करता है, जो अनंत हो सकता है।

सभी नोड्स Erlang नोड्स हैं, तो यह समस्या मौजूद नहीं है।

कॉल करने वाले की संदेश कतार को प्रदूषित करने से देर से आने वाले उत्तर (टाइम-आउट के बाद) को रोकने के लिए, कॉल करने के लिए एक बिचौलिया प्रक्रिया का उपयोग किया जाता है। देर से जवाब तब खारिज कर दिया जाता है जब वे एक समाप्त प्रक्रिया में आते हैं।

उत्तर (ग्राहक, उत्तर) -> परिणाम

प्रकार

इस फ़ंक्शन का उपयोग एक gen_server प्रक्रिया द्वारा स्पष्ट रूप से क्लाइंट को जवाब भेजने के लिए किया जा सकता है जिसे call/2,3 या multi_call/2,3,4 कहा जाता है, जब उत्तर को Module:handle_call/3 मान में परिभाषित नहीं किया जा सकता Module:handle_call/3

Client को कॉलबैक फ़ंक्शन From प्रदान किए गए तर्क From होना चाहिए। Reply किसी भी शब्द को call/2,3 या multi_call/2,3,4 के वापसी मूल्य के रूप में ग्राहक को दिया जाता है।

वापसी मान Result आगे परिभाषित नहीं है, और हमेशा अनदेखा किया जाना है।

start (मॉड्यूल, आर्ग, विकल्प) -> परिणाम
start (ServerName, मॉड्यूल, आर्ग्स, विकल्प) -> परिणाम

प्रकार

एक स्टैंडअलोन gen_server प्रक्रिया बनाता है, जो एक gen_server प्रक्रिया है जो किसी पर्यवेक्षण ट्री का हिस्सा नहीं है और इस प्रकार इसका कोई पर्यवेक्षक नहीं है।

तर्कों और वापसी मूल्यों के विवरण के लिए, start[_link]/3,4 देखें।

start_link (मॉड्यूल, आर्ग, विकल्प) -> परिणाम
start_link (ServerName, मॉड्यूल, आर्ग, विकल्प) -> परिणाम

प्रकार

एक पर्यवेक्षण वृक्ष के हिस्से के रूप में एक gen_server प्रक्रिया बनाता है। इस फ़ंक्शन को पर्यवेक्षक द्वारा प्रत्यक्ष या अप्रत्यक्ष रूप से बुलाया जाना है। उदाहरण के लिए, यह सुनिश्चित करता है कि gen_server प्रक्रिया पर्यवेक्षक से जुड़ी हुई है।

gen_server प्रक्रिया Module:init/1 कॉल करती है Module:init/1 आरंभ करने के लिए Module:init/1 । एक सिंक्रनाइज़ स्टार्टअप प्रक्रिया सुनिश्चित करने के लिए, start_link/3,4 तब तक वापस नहीं आता जब तक Module:init/1 वापस नहीं आ गया।

  • यदि ServerName={local,Name} , तो gen_server प्रक्रिया स्थानीय रूप से register/2 Name का उपयोग करते हुए register/2

  • यदि ServerName={global,GlobalName} , gen_server प्रक्रिया आईडी वैश्विक रूप से GlobalName रूप में वैश्विक रूप से global:register_name/2 यदि कोई नाम प्रदान नहीं किया गया है, तो gen_server प्रक्रिया पंजीकृत नहीं है।

  • यदि ServerName={via,Module,ViaName} , तो gen_server प्रक्रिया Module द्वारा प्रस्तुत रजिस्ट्री के साथ पंजीकृत होती है। Module कॉलबैक फ़ंक्शन register_name/2 , unregister_name/1 , whereis_name/1 , और send/2 को निर्यात करना है, जो कि global में संबंधित कार्यों की तरह व्यवहार करना है। इस प्रकार, {via,global,GlobalName} एक वैध संदर्भ है।

Module कॉलबैक मॉड्यूल का नाम है।

Args किसी भी शब्द को Module:init/1 के तर्क के रूप में पारित किया जाता है Module:init/1

  • यदि विकल्प {timeout,Time} मौजूद है, तो gen_server प्रक्रिया को इनिशियलाइज़ करने के लिए Time gen_server खर्च करने की अनुमति दी जाती है या इसे समाप्त कर दिया जाता है और स्टार्ट फंक्शन {error,timeout}

  • यदि विकल्प {hibernate_after,HibernateAfterTimeout} मौजूद है, तो gen_server प्रक्रिया HibernateAfterTimeout मिलीसेकंड के लिए किसी भी संदेश का इंतजार करती है और यदि कोई संदेश प्राप्त नहीं होता है, तो प्रक्रिया स्वचालित रूप से हाइबरनेशन पर जाती है ( proc_lib:hibernate/3 को कॉल proc_lib:hibernate/3 )।

  • यदि विकल्प {debug,Dbgs} मौजूद है, तो संबंधित आइटम को Dbgs में प्रत्येक आइटम के लिए कहा जाता है; sys(3)

  • यदि विकल्प {spawn_opt,SOpts} मौजूद है, तो SOpts को SOpts विकल्प सूची के रूप में पारित किया जाता है, जिसका उपयोग gen_server प्रक्रिया को स्पॉन करने के लिए किया जाता है; spawn_opt/2 देखें।

ध्यान दें

स्पॉन ऑप्शन monitor का उपयोग करने की अनुमति नहीं है, यह फ़ंक्शन को कारण badarg साथ विफल होने का कारण badarg

यदि gen_server प्रक्रिया सफलतापूर्वक बनाई और आरंभ की जाती है, तो फ़ंक्शन {ok,Pid} , जहां Pid gen_server प्रक्रिया का pid है। यदि निर्दिष्ट ServerName साथ एक प्रक्रिया पहले से मौजूद है, तो फ़ंक्शन {error,{already_started,Pid}} पहले से ही {error,{already_started,Pid}} , जहां Pid उस प्रक्रिया का पिड है।

यदि Module:init/1 Reason साथ विफल हो जाता है, तो फ़ंक्शन {error,Reason} । यदि Module:init/1 रिटर्न {stop,Reason} या ignore , तो प्रक्रिया समाप्त हो जाती है और फ़ंक्शन क्रमशः {error,Reason} या ignore है।

रोक (ServerRef) -> ठीक है
बंद करो (ServerRef, कारण, समय समाप्त) -> ठीक है

प्रकार

निर्दिष्ट Reason साथ बाहर निकलने के लिए एक सामान्य सर्वर का आदेश देता है और इसे समाप्त करने का इंतजार करता है। gen_server प्रक्रिया Module:terminate/2 कॉल करती है Module:terminate/2 बाहर निकलने से पहले Module:terminate/2

यदि सर्वर अपेक्षित कारण से समाप्त होता है तो फ़ंक्शन ok होता है। normal , shutdown , या {shutdown,Term} अलावा कोई अन्य कारण logger(3) का उपयोग करके एक त्रुटि रिपोर्ट जारी करने का कारण बनता है। डिफ़ॉल्ट Reason normal

Timeout शून्य से अधिक पूर्णांक है जो निर्दिष्ट करता है कि सर्वर के समाप्त होने की प्रतीक्षा करने के लिए कितने मिलीसेकंड हैं, या परमाणु infinity से अनिश्चित काल तक प्रतीक्षा करने के लिए। infinity । यदि सर्वर निर्दिष्ट समय के भीतर समाप्त नहीं हुआ है, तो एक timeout अपवाद उठाया जाता है।

यदि प्रक्रिया मौजूद नहीं है, तो एक noproc अपवाद उठाया जाता है।

कॉलबैक कार्य

निम्नलिखित कार्य एक gen_server कॉलबैक मॉड्यूल से निर्यात किए जाने हैं।

निर्यात

मॉड्यूल: code_change (OldVsn, State, Extra) -> {ठीक है, NewState} | {त्रुटि, कारण}

प्रकार

ध्यान दें

यह कॉलबैक वैकल्पिक है, इसलिए कॉलबैक मॉड्यूल को इसे निर्यात करने की आवश्यकता नहीं है। यदि Change={advanced,Extra} साथ एक रिलीज अपग्रेड / डाउनग्रेड Change={advanced,Extra} appup Change={advanced,Extra} निर्दिष्ट किया जाता है, जब code_change/3 को लागू नहीं किया जाता है, तो यह प्रक्रिया code_change/3 निकास कारण के साथ क्रैश हो जाएगी।

इस फ़ंक्शन को एक gen_server प्रक्रिया द्वारा बुलाया जाता है, जब इसे रिलीज़ अपग्रेड / डाउनग्रेड के दौरान अपनी आंतरिक स्थिति को अपडेट करना होता है, अर्थात, जब निर्देश {update,Module,Change,...} , जहां Change={advanced,Extra} , appup फ़ाइल में appup है। अधिक जानकारी के लिए, ओटीपी डिज़ाइन सिद्धांतों में अनुभाग Release Handling Instructions देखें।

अपग्रेड के लिए, OldVsn Vsn , और डाउनग्रेड के लिए, OldVsn {down,Vsn} Vsn को कॉलबैक मॉड्यूल Module के पुराने संस्करण के vsn विशेषता (एस) द्वारा परिभाषित किया गया है। यदि ऐसी कोई विशेषता परिभाषित नहीं है, तो संस्करण बीम फ़ाइल का चेकसम है।

State gen_server प्रक्रिया की आंतरिक स्थिति है।

Extra को "के रूप में" अद्यतन निर्देश के {advanced,Extra} भाग से पारित किया गया है।

सफल होने पर, फ़ंक्शन को अद्यतन आंतरिक स्थिति को वापस करना होगा।

यदि फ़ंक्शन {error,Reason} लौटाता है, तो चल रहा अपग्रेड विफल हो जाता है और पुरानी रिलीज़ पर वापस आ जाता है।

मॉड्यूल: format_status (ऑप्ट, [पीडीआईसी, राज्य]) -> स्थिति

प्रकार

ध्यान दें

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

इस फ़ंक्शन को निम्न स्थितियों में एक gen_server प्रक्रिया द्वारा बुलाया जाता है:

  • sys:get_status/1,2 एक sys:get_status/1,2 को gen_server दर्जा पाने के लिए आमंत्रित किया जाता है। Opt परमाणु के लिए normal

  • gen_server प्रक्रिया असामान्य रूप से समाप्त हो जाती है और एक त्रुटि लॉग करती है। Opt परमाणु terminate सेट है।

यह फ़ंक्शन इन मामलों के लिए gen_server स्थिति के रूप और स्वरूप को बदलने के लिए उपयोगी है। sys:get_status/1,2 बदलने की इच्छा रखने वाला कॉलबैक मॉड्यूल sys:get_status/1,2 रिटर्न वैल्यू, साथ ही समाप्ति स्थिति त्रुटि लॉग में इसकी स्थिति कैसे दिखाई देती है, format_status/2 का एक उदाहरण निर्यात करता है जो gen_server प्रक्रिया की वर्तमान स्थिति का वर्णन करते हुए एक शब्द देता है।

PDict प्रक्रिया की प्रक्रिया शब्दकोश का वर्तमान मूल्य है।

State gen_server प्रक्रिया की आंतरिक स्थिति है।

फ़ंक्शन Status , एक शब्द है जो वर्तमान स्थिति और gen_server प्रक्रिया की स्थिति के विवरण को gen_server है। Status पर कोई प्रतिबंध नहीं लग सकते हैं, लेकिन Status लिए sys:get_status/1,2 मामला ( Opt normal ), Status मान के लिए अनुशंसित फ़ॉर्म [{data, [{"State", Term}]}] , जहां Term gen_server राज्य का प्रासंगिक विवरण प्रदान gen_server है। इस सिफारिश का पालन करने की आवश्यकता नहीं है, लेकिन यह कॉलबैक मॉड्यूल की स्थिति को बाकी के साथ संगत बनाता है sys:get_status/1,2 वापसी मूल्य।

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

मॉड्यूल: handle_call (अनुरोध, राज्य से) -> परिणाम

प्रकार

जब भी एक gen_server प्रक्रिया को call/2,3 या multi_call/2,3,4 का उपयोग करके भेजा गया अनुरोध प्राप्त होता है, तो इस फ़ंक्शन को अनुरोध को संभालने के लिए कहा जाता है।

Request call या multi_call करने के लिए प्रदान किया गया Request तर्क है।

From टपल {Pid,Tag} पिड {Pid,Tag} , जहां पिड क्लाइंट का पिड है और Tag एक अनूठा टैग है।

State gen_server प्रक्रिया की आंतरिक स्थिति है।

  • यदि {reply,Reply,NewState} लौटाया जाता है, तो {reply,Reply,NewState,Timeout} या {reply,Reply,NewState,hibernate} , Reply को call/2,3 के रिटर्न मान के रूप में वापस From दिया जाता है call/2,3 शामिल multi_call/2,3,4 का रिटर्न मान। gen_server प्रक्रिया तब संभवतः अद्यतन आंतरिक स्थिति gen_server साथ निष्पादित होती रहती है।

    Timeout और hibernate विवरण के लिए, Module:init/1 देखें Module:init/1

  • यदि {noreply,NewState} लौटाया जाता है, तो {noreply,NewState,Timeout} , या {noreply,NewState,hibernate} , gen_server प्रक्रिया gen_server साथ निष्पादित होती रहती है। से कोई भी उत्तर स्पष्ट रूप से reply/2 का उपयोग करके निर्दिष्ट किया जाना चाहिए।

  • यदि {stop,Reason,Reply,NewState} लौटाया जाता है, तो Reply वापस से दिया जाता है।

  • यदि {stop,Reason,NewState} वापस आ गया है, तो From किसी भी उत्तर को reply/2 का उपयोग करके स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए। gen_server प्रक्रिया तब Module:terminate(Reason,NewState) कॉल करती है Module:terminate(Reason,NewState) और समाप्त हो जाती है।

मॉड्यूल: हैंडल_कास्ट (अनुरोध, राज्य) -> परिणाम

प्रकार

जब भी एक gen_server प्रक्रिया को cast/2 या abcast/2,3 का उपयोग करके भेजा गया अनुरोध प्राप्त होता है, तो अनुरोध को संभालने के लिए इस फ़ंक्शन को कहा जाता है।

तर्कों और संभावित वापसी मूल्यों के विवरण के लिए, Module:handle_call/3 देखें Module:handle_call/3

मॉड्यूल: handle_continue (जारी रखें, राज्य) -> परिणाम

प्रकार

ध्यान दें

यह कॉलबैक वैकल्पिक है, इसलिए कॉलबैक मॉड्यूल को केवल तभी निर्यात करने की आवश्यकता होती है, जब वे किसी अन्य कॉलबैक से {continue,Continue} वापस करते हैं। यदि जारी रखा जाता है और कॉलबैक लागू नहीं किया जाता है, तो प्रक्रिया undef त्रुटि के साथ बाहर निकल जाएगी।

जब भी कोई पिछला कॉलबैक {continue, Continue} इस फ़ंक्शन को एक gen_server प्रक्रिया द्वारा बुलाया जाता है। पिछले कॉलबैक के तुरंत बाद handle_continue/2 को लागू किया जाता है, जो प्रारंभिक अवस्था के बाद कार्य करने के लिए या कई चरणों में कॉलबैक में कार्य को विभाजित करने के लिए उपयोगी बनाता है, जिस तरह से प्रक्रिया की स्थिति को अपडेट करता है।

अन्य तर्कों और संभावित वापसी मूल्यों के विवरण के लिए, Module:handle_call/3 देखें Module:handle_call/3

मॉड्यूल: handle_info (जानकारी, स्थिति) -> परिणाम

प्रकार

ध्यान दें

यह कॉलबैक वैकल्पिक है, इसलिए कॉलबैक मॉड्यूल को इसे निर्यात करने की आवश्यकता नहीं है। gen_server मॉड्यूल इस फ़ंक्शन का एक डिफ़ॉल्ट कार्यान्वयन प्रदान करता है जो अप्रत्याशित Info संदेश के बारे में लॉग करता है, इसे ड्रॉप करता है और {noreply, State}

यह कार्य एक gen_server प्रक्रिया द्वारा gen_server है जब एक टाइम-आउट होता है या जब यह एक तुल्यकालिक या अतुल्यकालिक अनुरोध (या एक सिस्टम संदेश) की तुलना में कोई अन्य संदेश प्राप्त करता है।

Info या तो एटम timeout , यदि कोई टाइम-आउट हुआ है, या प्राप्त संदेश।

अन्य तर्कों और संभावित वापसी मूल्यों के विवरण के लिए, Module:handle_call/3 देखें Module:handle_call/3

मॉड्यूल: init (आर्ग्स) -> परिणाम

प्रकार

जब भी एक gen_server प्रक्रिया start/3,4 या start[_link]/3,4 का उपयोग करके start/3,4 , तो इस फ़ंक्शन को प्रारंभ करने के लिए नई प्रक्रिया द्वारा बुलाया जाता है।

Args Args तर्क है जो आरंभिक कार्य को प्रदान करता है।

यदि इनिशियलाइज़ेशन सफल होता है, तो फंक्शन {ok,State} , {ok,State,Timeout} , या {ok,State,hibernate} , जहां State gen_server प्रोसेस की आंतरिक स्थिति है।

यदि पूर्णांक टाइम-आउट मान प्रदान किया जाता है, तो टाइम-आउट तब होता है जब तक कि Timeout मिलीसेकंड के भीतर अनुरोध या संदेश प्राप्त नहीं होता है। एक टाइम-आउट परमाणु timeout द्वारा दर्शाया जाता है, जिसे Module:handle_info/2 द्वारा नियंत्रित किया जाना है Module:handle_info/2 फंक्शन। परमाणु infinity को अनिश्चित काल तक प्रतीक्षा करने के लिए इस्तेमाल किया जा सकता है, यह डिफ़ॉल्ट मान है।

यदि hibernate को टाइम-आउट मान के बजाय निर्दिष्ट किया जाता है, तो अगले संदेश के आने की प्रतीक्षा करते समय प्रक्रिया हाइबरनेशन में चली जाती है ( proc_lib:hibernate/3 को कॉल proc_lib:hibernate/3 )।

यदि इनिशियलाइज़ेशन विफल हो जाता है, तो फंक्शन {stop,Reason} को वापस करना है, जहाँ Reason कोई भी शब्द है, या ignore

मॉड्यूल: समाप्त (कारण, राज्य)

प्रकार

ध्यान दें

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

यह फ़ंक्शन एक gen_server प्रक्रिया द्वारा बुलाया जाता है जब यह समाप्त होने वाला होता है। यह Module:init/1 के विपरीत होना है Module:init/1 और किसी भी आवश्यक सफाई करना। जब यह वापस आता है, तो gen_server प्रक्रिया Reason साथ समाप्त हो जाती है। रिटर्न वैल्यू को नजरअंदाज किया जाता है।

Reason एक शब्द है, जो स्टॉप कारण को दर्शाता है और स्थिति gen_server प्रक्रिया की आंतरिक स्थिति है।

Reason बात पर निर्भर करता है कि gen_server प्रक्रिया समाप्त क्यों हो रही है। यदि ऐसा इसलिए है क्योंकि किसी अन्य कॉलबैक फ़ंक्शन ने स्टॉप टपल {stop,..} को वापस कर दिया है, तो उस ट्यूपल में निर्दिष्ट मान है। यदि यह विफलता के Reason है, तो Reason त्रुटि का कारण है।

यदि gen_server प्रक्रिया एक पर्यवेक्षण ट्री का हिस्सा है और इसके पर्यवेक्षक द्वारा समाप्त करने का आदेश दिया जाता है, तो यह फ़ंक्शन Reason=shutdown साथ कहा जाता है यदि निम्न स्थितियां लागू होती हैं:

  • gen_server प्रक्रिया को निकास संकेतों को फंसाने के लिए निर्धारित किया गया है।

  • पर्यवेक्षक के बच्चे के विनिर्देश में परिभाषित शटडाउन रणनीति एक पूर्णांक समय-आउट मान है, न कि brutal_kill

यहां तक ​​कि अगर gen_server प्रक्रिया पर्यवेक्षण ट्री का हिस्सा नहीं है , तो इस फ़ंक्शन को कहा जाता है यदि यह अपने माता-पिता से एक 'EXIT' संदेश प्राप्त करता है। Reason 'EXIT' संदेश के समान है।

अन्यथा, gen_server प्रक्रिया तुरंत समाप्त हो जाती है।

ध्यान दें कि normal , shutdown , या {shutdown,Term} अलावा किसी अन्य कारण से, gen_server प्रक्रिया को एक त्रुटि के कारण समाप्त मान लिया जाता है और एक त्रुटि रिपोर्ट logger(3) का उपयोग करके जारी की जाती है।

यह भी देखें

gen_event(3) , gen_statem(3) , proc_lib(3) , supervisor(3) , sys(3)