![](/img/trans.png)
[英]How does an Erlang gen_server start_link a gen_server on another node?
[英]How to host a gen_server as a standalone node using rebar3 release?
我有一個rebar3
項目,它有一些gen_server
實現。 我想以這樣的方式編寫一個應用程序,該版本將把gen_server
作為一個 Erlang 節點在守護進程模式下托管。
有一些 gen 服務器:
%% file src/my_gen_server.erl
-module(my_gen_server).
-behaviour(gen_server).
...
我想編譯項目
$ rebar3 release
然后將其作為守護進程運行:
_build/prod/rel/myapp/bin/myapp daemon --setcookie biscuit
在一個單獨的終端 session 啟動 Erlang 並連接到它:
$ erl -sname test -setcookie biscuit
1> gen_server:call(my_gen_server, test).
response
我該如何設置? 這個問題我的意思是:如何讓應用程序成為那個 gen 服務器,以及如何讓它接受來自其他節點的傳入消息,可能在不同的機器上?
我想您的意思是您有一個“應用程序”項目,並且您希望將該應用程序作為發布中的唯一應用程序。
按照文檔中的說明將relx
部分添加到您的 rebar.config 並確保應用程序代碼是可訪問的,例如將其放在./apps/<application>/src/
中。 通過此步驟,您將獲得一個 erlang 版本來啟動您的應用程序代碼。
在 your.app.src 文件中,您指定一個實現 應用程序行為的Module
,通常該模塊啟動一個主管,但您可以直接在此處啟動您的gen_server
。 請記住,如果進程死亡,整個節點也會隨之死亡,這就是不鼓勵這樣做的原因。
關於您的最后一個問題,一旦您設置了分布式 erlang,您就可以使用{Name:: atom(), node()}: Message:: term()
語法向節點中的注冊進程發送消息。 您也可以使用gen_server或erpc中的方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.