我很难理解正确的方法来调用由具有simple_one_for_one
子策略的主管动态创建的 gen_server 实例。我正在尝试将数据访问控制创建为 gen_servers。每个实体都有自己的主管,并且该主管将根据需要创建 gen_server 实例,以便在数据库上实际执行 CRUD 操作。我了解定义子进程的过程,以及根据需要创建它们的过程。
最初,我的计划是将子创建过程抽象为 gen_server 模块中的自定义函数,该函数创建了一个子,使用 触发对该子的请求的操作(例如,查找、存储、删除)gen_server:call()
,然后将操作结果返回给调用过程。但是,除非我弄错了,否则这将阻止任何其他尝试使用这些函数的进程,直到调用返回。这绝对不是我的想法。
我可能会陷入 OO 模式(我的背景是 Java),但似乎应该有一种干净的方法允许一个模块中的函数获取对子进程的引用,然后对该进程进行调用而不会泄漏内部那个孩子。换句话说,我不想create_child()
在实体主管上调用该方法,然后让我的应用程序代码针对该子 PID(即gen_sever:call(Pid, {find_by_id, Id})
)进行 gen_server:calls。相反,我希望能够调用一个更像Child:find_by_id(Id)
.