Анонимный экземпляр gen_server?

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

Имя_Сервера = {локальное,Имя} | {глобальное, глобальное имя} | {via,Module,ViaName}
Name = atom()

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

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


person Sereja Bogolubov    schedule 03.02.2020    source источник


Ответы (1)


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

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

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

person Wojtek Surowka    schedule 03.02.2020