Elixir 1.7 - GenEvent

जनन व्यवहार




elixir

जनन व्यवहार

यह व्यवहार पदावनत है। इसके बजाय Erlang / OTP: gen_event मॉड्यूल का उपयोग करें।

इवेंट हैंडलर व्यवहार के साथ एक इवेंट मैनेजर।

यदि आप एक इवेंट मैनेजर को लागू करने में रुचि रखते हैं, तो कृपया नीचे "विकल्प" अनुभाग पढ़ें। यदि आपको किसी मौजूदा हैंडलर को मौजूदा सिस्टम के साथ एकीकृत करने के लिए कार्यान्वित करना है, जैसे कि :gen_event का लॉगर, कृपया उपयोग करें :gen_event बजाय :gen_event

वैकल्पिक

GenEvent को बदलने के लिए कुछ उपयुक्त विकल्प हैं। उनमें से प्रत्येक उपयोग के मामले के आधार पर सबसे अधिक फायदेमंद हो सकता है।

सुपरवाइजर और जेनसरवियर्स

GenEvent का एक विकल्प एक बहुत ही न्यूनतम समाधान है जिसमें पर्यवेक्षक और कई GenServers का उपयोग किया जाता है। पर्यवेक्षक "ईवेंट मैनेजर" के रूप में कार्य करता है और बच्चे जेनसर्वर्स "ईवेंट हैंडलर" के रूप में कार्य करते हैं। इस दृष्टिकोण में कुछ कमियाँ हैं (यह उदाहरण के लिए कोई बैकप्रेशर प्रदान नहीं करता है) लेकिन फिर भी इसके लो-प्रोफाइल usages के लिए GenEvent को बदल सकता है। जोस वालिम के इस ब्लॉग पोस्ट में इस दृष्टिकोण पर अधिक विस्तृत जानकारी है।

GenStage

यदि उपयोग का मामला जहां आप GenEvent का उपयोग कर रहे थे, तो अधिक जटिल तर्क की आवश्यकता होती है, GenStage एक शानदार विकल्प प्रदान करता है। जेनस्टेज एक बाहरी एलिक्सिर लाइब्रेरी है जिसे एलिक्जिर टीम ने बनाए रखा है; यह सिस्टम को कार्यान्वित करने के लिए एक उपकरण प्रदान करता है जो बैकपेक्चर के लिए अंतर्निहित समर्थन के साथ मांग-संचालित तरीके से घटनाओं का आदान-प्रदान करता है। अधिक जानकारी के लिए GenStage प्रलेखन देखें।

:gen_event

यदि आपके उपयोग के मामले में वास्तव में जेनेवेंट द्वारा प्रदान की गई आवश्यकता है, या आपको मौजूदा :gen_event प्रणाली के साथ एकीकृत करना है, तो आप अभी भी उपयोग कर सकते हैं :gen_event Erlang मॉड्यूल।

सारांश

प्रकार

handler()
manager()
name()
on_start()
options()

कॉलबैक

code_change (old_vsn, राज्य, अतिरिक्त)
handle_call (अनुरोध, राज्य)
handle_event (घटना, राज्य)
handle_info (संदेश, राज्य)
init(args)
समाप्त (कारण, राज्य)

प्रकार

हैंडलर ()

handler() :: atom() | {atom(), term()}

प्रबंधक ()

manager() :: pid() | name() | {atom(), node()}

नाम ()

name() :: atom() | {:global, term()} | {:via, module(), term()}

on_start ()

on_start() :: {:ok, pid()} | {:error, {:already_started, pid()}}

विकल्प ()

options() :: [{:name, name()}]

कॉलबैक

code_change (old_vsn, राज्य, अतिरिक्त)

code_change(old_vsn, state :: term(), extra :: term()) ::
  {:ok, new_state :: term()}
when old_vsn: term() | {:down, term()}

handle_call (अनुरोध, राज्य)

handle_call(request :: term(), state :: term()) ::
  {:ok, reply, new_state}
  | {:ok, reply, new_state, :hibernate}
  | {:remove_handler, reply}
when reply: term(), new_state: term()

handle_event (घटना, राज्य)

handle_event(event :: term(), state :: term()) ::
  {:ok, new_state} | {:ok, new_state, :hibernate} | :remove_handler
when new_state: term()

handle_info (संदेश, राज्य)

handle_info(msg :: term(), state :: term()) ::
  {:ok, new_state} | {:ok, new_state, :hibernate} | :remove_handler
when new_state: term()

init (args)

init(args :: term()) ::
  {:ok, state} | {:ok, state, :hibernate} | {:error, reason :: any()}
when state: any()

समाप्त (कारण, राज्य)

terminate(reason, state :: term()) :: term()
when reason:
       :stop | {:stop, term()} | :remove_handler | {:error, term()} | term()