Модуль gen_server содержит функции для работы с актором-сервером, создаваемом на основе обобщённого поведения gen_server. Данный модуль по смыслу и по функциям во многом похож на модуль gen_statem, также используемый для создания акторов-серверов. У каждого свои преимущества. 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 Алексей Карманов