Elixir - 从另一个节点调用生成服务器
Elixir - Call gen server from another node
我的电脑上有两个节点(foo@my-pc
和 bar@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”那么你不能在那个节点上注册另一个同名的进程。
如果您需要一个进程的倍数,那么您可以使用主管获取该进程的子进程,使用它并要求主管在完成后终止子进程。
此设计模式将帮助您通过主管管理子进程,以防子进程崩溃。
我的电脑上有两个节点(foo@my-pc
和 bar@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”那么你不能在那个节点上注册另一个同名的进程。
如果您需要一个进程的倍数,那么您可以使用主管获取该进程的子进程,使用它并要求主管在完成后终止子进程。
此设计模式将帮助您通过主管管理子进程,以防子进程崩溃。