Модуль gen_server

Модуль gen_server содержит функции для работы с актором-сервером, создаваемом на основе обобщённого поведения gen_server. Данный модуль по смыслу и по функциям во многом похож на модуль gen_statem, также используемый для создания акторов-серверов. У каждого свои преимущества. gen_server работает чуть быстрее, а также можно делать запросы сразу на несколько серверов, работающих на разных нодах.

Функции модуля gen_server

abcast(Name, Request) Разом посылает асинхронный запрос на все ноды, подключенные к текущей ноде, включая её саму, — на сервер с локальным именем Name на этих нодах.

abcast(Nodes, Name, Request) Разом посылает асинхронный запрос на все ноды Nodes — на сервер (построенный на основе gen_server) с локальным именем Name на этих нодах.

call(ServerRef, Request) Вызов удалённых процедур генсервера.

call(ServerRef, Request, Timeout) Посылает синхронный запрос на сервер, построенный на основе gen_server; по таймауту прекращается ожидание.

cast(ServerRef, Request) Посылает асинхронное сообщение (событие) на сервер, построенный на основе gen_server.

check_response(Msg, ReqId) Проверяет, является ли полученное сообщение ответом на запрос с идентификатором ReqId.

check_response(Msg, ReqIdCollection, Delete) Проверяет, является ли полученное сообщение ответом на запрос, содержащийся в коллекции запросов.

enter_loop(Module, Options, State, ServerName, Action) Наделяет текущий актором поведением gen_server; ничего не возвращает, превращаясь в loop.

multi_call(Name, Request) Делает синхронный вызов сразу на все доступные ноды — на сервера с локальным именем Name; возвращает кортеж {Replies, BadNodes}, то есть ответы и список несуществующих нод.

multi_call(Nodes, Name, Request, Timeout) Делает синхронный вызов сразу на ряд нод, где запущен сервер с локальным именем Name; возвращает кортеж {Replies, BadNodes}, то есть ответы и список несуществующих нод.

receive_response(ReqId, Timeout) Ожидает получение ответа на запрос с идентификатором ReqId.

receive_response(ReqIdCollection, Timeout, Delete) Ожидает получения ответа на запрос из указанной коллекции идентификаторов запросов.

reply(Client, Reply) Внутри колбека посылает клиенту ответ на синхронный call-запрос.

reqids_add(ReqId, Label, ReqIdCollection) Сохраняет идентификатор запроса в коллекции, снабжая его меткой.

reqids_new() Создаёт пустую коллекцию идентификаторов запросов.

reqids_size(ReqIdCollection) Возвращает текущее количество запросов в коллекции.

reqids_to_list(ReqIdCollection) Превращает коллекцию идентификаторов запросов в список.

send_request(ServerRef, Request) Посылает асинхронный call-запрос на сервер, созданный на основе gen_server; немедленно возвращает идентификатор запроса.

send_request(ServerRef, Request, Label, ReqIdCollection) Посылает асинхронный запрос и добавляет его идентификатор в коллекцию.

start(Module, Args, Options) Запускает ген-сервер, без линка и регистрации.

start(ServerName, Module, Args, Options) Запускает ген-сервер, регистрируя, но не линкуя.

start_link(Module, Args, Options) Запускает сервер, линкуя, но не регистрируя его.

start_link(ServerName, Module, Args, Options) Запускает ген-сервер, линкуя и регистрируя его.

start_monitor(Module, Args, Options) Запускает ген-сервер, с монитором, но без регистрации.

start_monitor(ServerName, Module, Args, Options) Запускает ген-сервер, с монитором и регистрацией.

stop(ServerRef, Reason, Timeout) Останавливает ген-сервер.

wait_response(ReqId, WaitTime) Ожидает ответа на асинхронный call-запрос с идентификатором ReqId.

wait_response(ReqIdCollection, WaitTime, Delete) Ожидает ответа на любой асинхронный call-запрос из коллекции.


Copyright © 2025 Алексей Карманов