gpt4 book ai didi

erlang - 获取在远程节点上运行的进程的 PID

转载 作者:行者123 更新时间:2023-12-02 01:33:28 28 4
gpt4 key购买 nike

我是 Erlang 的新手,我们正在开发一个小型消息服务器。

我们正在尝试使用 Redis(由于其他业务需要,不打算使用现有的 grpoc、全局等)作为数据存储(存储以保存用户 ID 到“节点 | PID”映射)来构建进程注册表。当进程启动时,它会以 user_id (key) 和 {node | pid } 作为值。 (pid在redis中被撕成字符串)

在 redis 中插入的示例值是 "user_abc", {one@mf, "0.37.0>"}

现在,当我尝试查找在集群中运行的“user_abc”的 PID 时,我将 {node 和 pid} 作为远程节点上的值,在本例中为 {one@mf, "0.37.0>".

问题是我们如何使用远程节点上的 {node, pid} 详细信息来连接到进程 user_abc。

预先感谢您的帮助。

最佳答案

您可以通过解析远程节点上的 pid 来获得“集群范围”的 pid:

在节点 a 上:

(a@host)1> pid_to_list(self()).
"<0.39.0>"

在节点 b 上:

(b@host)1> Pid = rpc:call('a@host', erlang, list_to_pid, ["<0.39.0>"]).
<7101.99.0>
(b@host)2> Pid ! my_test.
my_test

在节点 a 上:

(a@host)2> flush().
Shell got my_test
ok

请注意,该进程可能不存在,因此在与它对话之前对其调用 erlang:monitor/2 可能是个好主意。

关于erlang - 获取在远程节点上运行的进程的 PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32708758/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com