erlang 如何使用rebar3版本将gen_server作为独立节点托管?

ux6nzvsh  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(219)

我有一个rebar3项目,其中有一些gen_server的实现。我想写一个应用程序,以这样一种方式,发布将托管该gen_server作为一个守护进程模式的Erlang节点。
示例
有一些创服务器:

%% file src/my_gen_server.erl
-module(my_gen_server).
-behaviour(gen_server).
...

我想编译项目

$ rebar3 release

然后将其作为守护程序运行:

_build/prod/rel/myapp/bin/myapp daemon --setcookie biscuit

在单独的终端会话中启动Erlang并连接到它:

$ erl -sname test -setcookie biscuit
1> gen_server:call(my_gen_server, test).
response

我该如何设置?我的意思是:如何使应用程序成为gen服务器,以及如何使它接受来自其他节点(可能在不同的机器上)的传入消息?

x4shl7ld

x4shl7ld1#

我想您的意思是您有一个“应用程序”项目,并且您希望将该应用程序作为一个版本中的唯一应用程序。
按照文档中的说明,在rebar.config中添加一个relx节,并确保应用程序代码是可访问的,例如将其保存在./apps/<application>/src/中。通过这一步,您将拥有一个启动应用程序代码的erlang版本。
在你的.app.src文件中,你指定一个Module来实现应用程序的行为,通常这个模块会启动一个管理程序,但是你也可以直接在这里启动你的gen_server。只要记住,如果进程死亡,整个节点也会随之死亡,这就是为什么不鼓励这样做的原因。
关于您的最后一个问题,一旦设置了分布式erlang,就可以使用{Name :: atom(), node()} ! Message :: term()语法向节点中的注册进程发送消息。

相关问题