Erlang 21

net_kernel




erlang

net_kernel

मॉड्यूल

net_kernel

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

एर्लांग नेटवर्किंग कर्नेल।

विवरण

शुद्ध कर्नेल एक प्रणाली प्रक्रिया है, जिसे net_kernel रूप में पंजीकृत किया net_kernel , जिसे काम करने के लिए वितरित net_kernel होना चाहिए। इस प्रक्रिया का उद्देश्य BIFs spawn/4 और spawn_link/4 कुछ हिस्सों को लागू करना और नेटवर्क की निगरानी प्रदान करना है।

एक Erlang नोड कमांड-लाइन फ्लैग -sname या -sname का उपयोग करके शुरू किया गया है:

$ erl -sname foobar

यह भी संभव है कि net_kernel:start([foobar]) को सामान्य Erlang शेल प्रॉम्प्ट से सीधे कॉल करें:

1> net_kernel:start([foobar, shortnames]).
{ok,<0.64.0>}
([email protected])2>

यदि नोड को कमांड-लाइन फ्लैग -sname साथ शुरू किया -sname , तो नोड नाम [email protected] , जहां Host का संक्षिप्त नाम है (पूरी तरह से योग्य डोमेन नाम नहीं)। यदि फ़्लैग -name साथ शुरू किया जाता है, तो नोड नाम [email protected] , जहां Host पूरी तरह से योग्य डोमेन नाम है। अधिक जानकारी के लिए, erl देखें।

आम तौर पर, जब दूसरे नोड को संदर्भित किया जाता है, तो कनेक्शन स्वचालित रूप से स्थापित हो जाते हैं। कर्नेल कॉन्फ़िगरेशन पैरामीटर dist_auto_connect को never , kernel(6) को सेट करके इस कार्यक्षमता को अक्षम किया जा सकता है। इस स्थिति में, connect_node/1 कॉल करके कनेक्शन स्पष्ट रूप से स्थापित किया जाना चाहिए।

कौन से नोड्स को एक-दूसरे के साथ संवाद करने की अनुमति है जादू की कुकी प्रणाली द्वारा नियंत्रित किया जाता है, एर्लांग संदर्भ मैनुअल में अनुभाग Distributed Erlang देखें।

चेतावनी

डिस्ट्रिब्यूट किए गए नोड को भी निर्दिष्ट किए बिना शुरू करना -proto_dist inet_tls उन हमलों को नोड को उजागर करेगा जो हमलावर को नोड तक पहुंच प्रदान कर सकते हैं और क्लस्टर का विस्तार कर सकते हैं। अन-सिक्योर डिस्ट्रिब्यूटेड नोड्स का उपयोग करते समय, सुनिश्चित करें कि संभावित हमलावरों को बाहर रखने के लिए नेटवर्क को कॉन्फ़िगर किया गया है। सुरक्षित वितरित नोड को सेटअप करने के तरीके के विवरण के Using SSL for Erlang Distribution उपयोगकर्ता की मार्गदर्शिका के लिए Using SSL for Erlang Distribution देखें।

निर्यात

allow (Nodes) -> ठीक है | त्रुटि

प्रकार

नोड्स के निर्दिष्ट सेट तक पहुंच की अनुमति देता है।

allow/1 लिए पहली कॉल से पहले allow/1 , सही कुकी के साथ किसी भी नोड को जोड़ा जा सकता है। जब allow/1 कहा जाता है, तो अनुमत नोड्स की एक सूची स्थापित की जाती है। उस सूची में नहीं (या) नोड्स से किए गए किसी भी एक्सेस प्रयास को अस्वीकार कर दिया जाएगा।

allow/1 बाद की कॉलें निर्दिष्ट नोड्स को अनुमत नोड्स की सूची में जोड़ देंगी। सूची से नोड्स निकालना संभव नहीं है।

यदि Nodes में कोई तत्व एटम नहीं है, तो error देता है।

connect_node (Node) -> बूलियन () | अवहेलना करना

प्रकार

Node लिए एक कनेक्शन स्थापित करता है। यदि true , तो false और अगर स्थानीय नोड जीवित नहीं है, तो इसे ignored है।

get_net_ticktime () -> Res

प्रकार

net_ticktime ( kernel(6) देखें kernel(6) )।

निर्धारित रिटर्न मान ( Res ):

NetTicktime

net_ticktime NetTicktime सेकंड है।

{ongoing_change_to, NetTicktime}

net_kernel वर्तमान में net_ticktime को NetTicktime सेकंड में बदल रहा है।

ignored

स्थानीय नोड जीवित नहीं है।

गेटटॉप्स (नोड, विकल्प) ->
{ठीक है, विकल्पविलास} | {त्रुटि, कारण} | अवहेलना करना

प्रकार

Node जुड़े वितरण सॉकेट के लिए एक या अधिक विकल्प प्राप्त करें।

यदि Node कनेक्टेड नोड है तो रिटर्न मान inet:getopts(Sock, Options) से समान है inet:getopts(Sock, Options) जहां Node लिए वितरण सॉकेट है।

यदि Node से जुड़ा नहीं है {error, noconnection} तो स्थानीय नोड ज़िंदा नहीं है या {error, noconnection}

मॉनिटर_नॉड्स (झंडा) -> ठीक है | त्रुटि
मॉनिटर_नॉड्स (झंडा, विकल्प) -> ठीक है | त्रुटि

प्रकार

कॉलिंग प्रक्रिया संदेशों को नोड स्थिति बदलने के लिए सदस्यता या सदस्यता समाप्त करती है। एक नोड नोड संदेश एक नया नोड जुड़ा हुआ है जब सभी सदस्यता प्रक्रियाओं के लिए दिया जाता है, और एक नोड डिस्कनेक्ट किया गया है जब एक संदेश nodedown वितरित किया जाता है।

यदि Flag true , तो एक नई सदस्यता प्रारंभ की जाती है। यदि Flag false , तो सभी पिछले सदस्यताएँ एक ही Options साथ शुरू की जाती हैं। दो विकल्प सूचियों को एक ही माना जाता है यदि उनमें विकल्पों का समान सेट होता है।

कर्नेल संस्करण २.११.४ और ईआरटीएस संस्करण ५.५.४ के रूप में, निम्नलिखित की गारंटी है:

  • नए स्थापित कनेक्शन के माध्यम से पारित रिमोट नोड से किसी भी संदेश की डिलीवरी से पहले nodeup संदेश दिया जाता है।

  • जब तक कनेक्शन के माध्यम से पारित किए गए दूरस्थ नोड के सभी संदेश वितरित नहीं किए जाते हैं तब तक nodedown संदेश वितरित नहीं किए जाते हैं।

ध्यान दें कि यह 2.11.4 से पहले कर्नेल संस्करणों के लिए गारंटी नहीं है

कर्नेल संस्करण net_kernel के net_kernel , net_kernel सर्वर शुरू होने से पहले सदस्यताएँ भी बनाई जा सकती हैं, net_kernel:monitor_nodes/[1,2] ignored नहीं होता ignored

कर्नेल संस्करण 2.13 और ईआरटीएस संस्करण 5.7 के रूप में, निम्नलिखित की गारंटी है:

  • erlang:nodes/X परिणाम में संबंधित नोड प्रकट होने के बाद nodeup संदेश दिया जाता है।

  • nodedown erlang:nodes/X परिणाम में संबंधित नोड के गायब होने के बाद nodedown संदेश दिए जाते हैं।

ध्यान दें कि यह कर्नेल संस्करणों के लिए 2.13 से पहले की गारंटी नहीं है

नोड स्थिति परिवर्तन संदेशों का प्रारूप Options पर निर्भर करता है। यदि Options [] , जो डिफ़ॉल्ट है, प्रारूप इस प्रकार है:

{nodeup, Node} | {nodedown, Node}
  Node = node()

यदि Options [] नहीं है, तो प्रारूप इस प्रकार है:

{nodeup, Node, InfoList} | {nodedown, Node, InfoList}
  Node = node()
  InfoList = [{Tag, Val}]

InfoList की एक सूची है। इसकी सामग्री Options पर निर्भर करती है, नीचे देखें।

इसके अलावा, जब OptionList == [] , केवल दृश्यमान नोड्स, अर्थात, नोड्स जो erlang:nodes/0 के परिणाम में दिखाई देते हैं erlang:nodes/0 , पर नजर रखी जाती है।

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

{node_type, NodeType}

NodeType लिए मान्य मान:

visible

केवल दृश्य नोड्स के लिए स्थिति परिवर्तन संदेश नोड की सदस्यता लें। {node_type, visible} tuple {node_type, visible} शामिल है।

hidden

केवल छिपे हुए नोड के लिए संदेशों को नोड स्थिति बदलने के लिए सदस्यता लें। {node_type, hidden} tuple {node_type, hidden} शामिल है।

all

दृश्य और छिपे हुए नोड्स दोनों के लिए नोड स्थिति परिवर्तन संदेशों की सदस्यता लें। टपल {node_type, visible | hidden} {node_type, visible | hidden} InfoList में शामिल है।

nodedown_reason

टपल {nodedown_reason, Reason} InfoList में nodedown संदेशों में शामिल है।

Reason , वितरण मॉड्यूल या प्रक्रिया जो किसी भी शब्द का उपयोग किया जाता है, पर निर्भर करता है, लेकिन मानक TCP वितरण मॉड्यूल के लिए यह निम्न में से कोई भी हो सकता है:

connection_setup_failed

कनेक्शन सेटअप विफल ( nodeup संदेश भेजे जाने के बाद)।

no_network

कोई नेटवर्क उपलब्ध नहीं है।

net_kernel_terminated

net_kernel प्रक्रिया समाप्त हो गई।

shutdown

अनिर्दिष्ट कनेक्शन बंद।

connection_closed

कनेक्शन बंद कर दिया गया था।

disconnect

कनेक्शन काट दिया गया (वर्तमान नोड से मजबूर)।

net_tick_timeout

नेट टिक टाइम-आउट।

send_net_tick_failed

कनेक्शन पर नेट टिक भेजने में विफल।

get_status_failed

कनेक्शन पकड़े Port से स्थिति की जानकारी पुनर्प्राप्ति विफल रही।

set_net_ticktime (NetTicktime) -> Res
set_net_ticktime (NetTicktime, TransitionPeriod) -> Res

प्रकार

NetTicktime सेकंड के लिए NetTicktime kernel(6) ) सेट करता है। TransitionPeriod 60 चूक 60

कुछ परिभाषाएँ:

न्यूनतम संक्रमण यातायात अंतराल ( MTTI )

minimum(NetTicktime, PreviousNetTicktime)*1000 div 4 मिलीसेकंड।

संक्रमण काल

set_net_ticktime/2 (यानी, ( TransitionPeriod*1000 - 1) div MTTI + 1)*MTTI मिलीसेकंड के लिए कॉल के बाद TransitionPeriod सेकंड को कवर करने के लिए लगातार MTTI s की कम से कम संख्या का समय।

यदि NetTicktime < PreviousNetTicktime , net_ticktime परिवर्तन संक्रमण अवधि के अंत में किया जाता है; अन्यथा शुरुआत में। संक्रमण की अवधि के दौरान, net_kernel यह सुनिश्चित करता है कि कम से कम हर MTTI मिलीसेकंड पर सभी कनेक्शनों पर आउटगोइंग ट्रैफ़िक हो।

ध्यान दें

किसी भी नोड पर संक्रमण अवधि के अंत से पहले नेटवर्क में सभी नोड्स (एक ही NetTicktime ) पर net_ticktime परिवर्तन शुरू किया जाना चाहिए; अन्यथा कनेक्शन गलत तरीके से काट दिया जा सकता है।

निम्न में से एक लौटाता है:

unchanged

net_ticktime पहले से ही net_ticktime का मान है और अपरिवर्तित रह गया है।

change_initiated

net_kernel ने NetTicktime सेकंड में net_ticktime के परिवर्तन की पहल की।

{ongoing_change_to, NewNetTicktime}

अनुरोध को नजरअंदाज कर दिया गया है क्योंकि net_kernel , net_ticktime को बदलने में व्यस्त है।

सेटटॉप्स (नोड, विकल्प) -> ठीक | {त्रुटि, कारण} | अवहेलना करना

प्रकार

वितरण सॉकेट के लिए एक या अधिक विकल्प सेट करें। तर्क Node सभी भविष्य से जुड़े नोड्स के वितरण सॉकेट को प्रभावित करने के लिए या तो एक नोड नाम या परमाणु new हो सकता है।

वापसी मान inet:setopts/2 से समान है inet:setopts/2 या {error, noconnection} यदि Node एक कनेक्टेड नोड या new

यदि Node new तो Options कर्नेल inet_dist_listen_options पैरामीटर्स inet_dist_listen_options और inet_dist_connect_options भी जोड़े inet_dist_connect_options

यदि स्थानीय नोड जीवित नहीं है, तो ignored रिटर्न।

start ([नाम]) -> {ok, pid ()} | {त्रुटि, कारण}
start ([नाम, NameType]) -> {ok, pid ()} | {त्रुटि, कारण}
start ([नाम, NameType, टिकटाइम]) -> {ok, pid ()} | {त्रुटि, कारण}

प्रकार

एक गैर-वितरित नोड को net_kernel और अन्य आवश्यक प्रक्रियाओं को शुरू करके वितरित नोड में बदल देता है।

ध्यान दें कि तर्क एक सूची है जिसमें एक, दो या तीन तर्क हैं। NameType longnames और Ticktime से 15000 Ticktime करता है।

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

प्रकार

वितरित नोड को गैर-वितरित नोड में बदल देता है। नेटवर्क में अन्य नोड्स के लिए, यह नोड के नीचे जाने के समान है। केवल तभी संभव है जब नेट कर्नेल start/1 का उपयोग start/1 शुरू किया गया था, अन्यथा {error, not_allowed} को वापस लौटाया गया है। यदि स्थानीय नोड जीवित नहीं है {error, not_found} तो {error, not_found} लौटाता है।