Spec-Zone.ru › Elixir 1.16

Источник GenEvent поведение

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

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

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

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

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

Супервизор и GenСерверы

Альтернативой GenEvent является очень простое решение, состоящее из использования супервизора и нескольких GenСерверов, запущенных под ним. Супервизор действует как «менеджер событий», а дочерние GenСерверы действуют как «обработчики событий». Этот подход имеет некоторые недостатки (например, он не обеспечивает обратную связь), но все же может заменить 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 :: any()}
when state: any()

terminate(reason, state)Источник

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

Скачать версию ePub

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

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

Spec-Zone.ru

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