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