1

对于我的一个“学习项目”,我有一组 erlang 进程(实现 gen_server 的不同模块)。这些进程中的每一个都会产生并监督一个子进程,该子进程包含在一个不实现 otp 行为的单个模块中。

因此我有以下情况:

gen_server_a <-> module_a
gen_server_b <-> module_b
gen_server_c <-> module_c

每个子进程都做同样的事情:

  1. 使用模块的名称注册自身(例如 module_a)
  2. 在产卵期间根据父级传递的配置参数进行一些操作
  3. 使用其注册名称接收来自父级的命令

现在,我知道这远非完美。我想抽象架构以便仍然有 3 个 gen_servers,但只有一个用于子部分的梁文件,这样我就可以实现以下目标:

gen_server_a <-> module_generic (registered as module_a)
gen_server_b <-> module_generic (registered as module_b)
gen_server_c <-> module_generic (registered as module_c)

我怎样才能实现这样的目标?只是在生成过程中传递一个用于注册进程的原子?还有其他选择吗?

4

1 回答 1

3

module_generic构建一个start_link/1生成进程函数然后注册 Pid 的自己的过程中:

  start_link(Name) ->
    Pid = spawn_link(?MODULE, loop, []),
    register(Name, Pid),
    Pid.
于 2013-01-29T11:09:45.740 回答