Анонимный экземпляр `gen_server`? - PullRequest
1 голос
/ 03 февраля 2020

Согласно фактическим документам, gen_server:start_link имеет следующую подпись:

ServerName = {local, Name} | {global, GlobalName} | {via, Module, ViaName}
Name = atom ()

.. но что, если мне не нравится назначать другое имя (ни local, ни global) некоторым gen_server экземпляр и скорее хотел бы запомнить его PID и ссылаться на него таким анонимным способом? Могу ли я добиться такого поведения?

PS Зачем мне это нужно? Есть параметр, назовем его N, который определяет, сколько экземпляров одного и того же gen_server требуется. Текущая реализация делает что-то вроде instance_1 .. instance_N, генерируя эти атомы на лету, но на самом деле PID здесь будет достаточно. Вот почему я хотел бы избавиться от атомов и переопределить PID.

1 Ответ

4 голосов
/ 03 февраля 2020

Параметр ServerName используется для регистрации, поэтому на сервер можно ссылаться по имени. Но этот параметр не является обязательным, существует start_link версия без него:

start_link(Module, Args, Options) -> Result
start_link(ServerName, Module, Args, Options) -> Result

Сервер, запущенный версией с тремя параметрами, не зарегистрирован. Это полезно, когда кто-то предпочитает использовать другие средства над атомами для ссылки на серверы, например, когда используются несколько серверов одного типа.

...