Spec-Zone.ru › Elixir 1.17

Источник 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, вы можете по-прежнему использовать :gen_event модуль Erlang.

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

Типы

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.34.1) для язык программирования Elixir

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

Spec-Zone.ru

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