匿名`gen_server`实例?

Posted

技术标签:

【中文标题】匿名`gen_server`实例?【英文标题】:Anonymous `gen_server` instance? 【发布时间】:2020-05-18 22:45:13 【问题描述】:

根据实际文档,gen_server:start_link 具有以下签名:

服务器名称 = 本地,名称 | 全球,全球名称 | via,Module,ViaName 名称 = atom()

..但是如果我不想为某些gen_server 实例分配不同的名称(既不是local 也不是global)而是想记住它是PID 并在这样的匿名时尚?我能做到这样的行为吗?

附:为什么我需要这个?有一个参数,我们称之为N,它定义了同一个gen_server 需要多少个实例。当前的实现类似于instance_1..instance_N,动态生成这些原子,但实际上PID在这里就足够了。这就是为什么我想摆脱原子并更喜欢 PID。

【问题讨论】:

【参考方案1】:

ServerName参数用于注册,所以可以通过名字来引用服务器。但是这个参数是可选的,有start_link版本没有它:

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

三参数版本启动的服务器未注册。当一个人更喜欢使用其他方式而不是原子来引用服务器时,这很有用,例如当使用多个相同类型的服务器时。

【讨论】:

以上是关于匿名`gen_server`实例?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 gen_server 不尊重模式匹配?

gen_server:使用新状态调用

如何直观地描述 gen_server?

gen_server:啥是`start_monitor/4`中的`Mon`?

使用 gen_server 封装一个 mnesia 表?

通过 Jinterface 调用 gen_server?