Elixir - 从另一个节点调用生成服务器

Elixir - Call gen server from another node

我的电脑上有两个节点(foo@my-pcbar@my-pc)。
bar 节点中有一个简单的生成服务器:

defmodule Bar.Server do
  use ExActor.GenServer, export: :bar_server
  defstart start_link, do: initial_state(0)
  defcall get, state: state, do: reply(state)
  defcast(set(num), state: state, do: new_state(state + num))
end

Genserver 已启动并且 运行ning 所以当我 运行 :

GenServer.call(:bar_server, :get)

它非常有效。
我在 foo Node.connect :'bar@my-pc'
中通过 运行ning 将 foo 连接到 bar 我期望的是现在 foo 会熟悉 bar
中的 genserver :aa 但是 - 当我 运行

GenServer.call(:bar_server, :get) 

我得到:

 (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started  

我假设我遗漏了什么。但能弄清楚是什么。

假设您只想要两个节点之间的 GenServer 运行 的单个实例,您需要将 GenServer 显式注册为全局:

use ExActor.GenServer, export: {:global, :bar_server}

您注册一个进程使其成为单例:使其作为唯一实例可用。

如果你给它一个名字“name: processname”那么你不能在那个节点上注册另一个同名的进程。

如果您需要一个进程的倍数,那么您可以使用主管获取该进程的子进程,使用它并要求主管在完成后终止子进程。

此设计模式将帮助您通过主管管理子进程,以防子进程崩溃。