Spec-Zone.ru › Elixir 1.18

Исходный код GenEvent поведение

Это поведение устарело. Используйте модуль :gen_event из Erlang/OTP вместо него.

Поведение менеджера событий с обработчиками событий.

Если вы заинтересованы в реализации менеджера событий, пожалуйста, ознакомьтесь с разделом «Альтернативы» ниже. Если вам необходимо реализовать обработчик событий для интеграции с существующей системой, такой как Elixir's Logger, используйте :gen_event вместо этого.

Альтернативы

Существует несколько подходящих альтернатив для замены GenEvent. Каждая из них может быть наиболее выгодной в зависимости от случая использования.

Наблюдатель и GenServers

Альтернативой GenEvent является очень простое решение, состоящее из использования наблюдателя и нескольких GenServers, запущенных под ним. Наблюдатель выступает в качестве «менеджера событий», а дочерние GenServers — в качестве «обработчиков событий». Этот подход имеет некоторые недостатки (например, он не обеспечивает обратную связь), но он все еще может заменить GenEvent для использования с низким профилем. Эта статья в блоге от José Valim содержит более подробную информацию об этом подходе.

GenStage

Если сценарий использования, в котором вы использовали GenEvent, требует более сложной логики, GenStage предоставляет отличную альтернативу. GenStage — это внешняя библиотека Elixir, поддерживаемая командой Elixir; она предоставляет инструмент для реализации систем, которые обмениваются событиями в режиме запроса с встроенной поддержкой обратной связи. См. документацию GenStage для получения дополнительной информации.

:gen_event

Если ваш сценарий использования требует ровно того, что предоставлял GenEvent, или вам необходимо интегрироваться с существующей системой, основанной на :gen_event, вы по-прежнему можете использовать модуль Erlang :gen_event.

Краткое описание

Типы

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

Обработчики

code_change(old_vsn, state, extra)
handle_call(request, state)
handle_event(event, state)
handle_info(msg, state)
init(args)
terminate(reason, state)

Типы

handler()Исходный код

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

manager()Исходный код

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

name()Исходный код

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

on_start()Исходный код

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

options()Исходный код

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

Обработчики

code_change(old_vsn, state, extra)Исходный код

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

handle_call(request, state)Исходный код

@callback 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(event, state)Исходный код

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

handle_info(msg, state)Исходный код

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

init(args)Исходный код

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

terminate(reason, state)Исходный код

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

Загрузить версию ePub

Создано с использованием ExDoc (v0.36.1) для языка программирования Elixir

© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.18.1/GenEvent.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API