我知道,你可以簡單的瓶坯消息如下傳遞:是否可以向Erlang的未註冊流程發送消息?
self() ! hello.
,你可以看到消息致電:
的flush()。
我還可以創建功能簡單的過程喜歡的東西:
spawn(module, function, args).
但是我不明白怎麼可以將消息發送到流程與出注冊的PID。
我所看到的例子顯示,你可以在外殼與此模式匹配得到的PID分配給一個變種,所以如果我創建了一個gen_server如:
...
start_link() ->
gen_server:start_link(?MODULE, init, []).
init(Pid) ->
{ok, Pid}.
...
然後我就可以用調用它從shell執行以下操作:
{ok, Pid} = test_sup:start_link().
{ok,<0.143.0>}
> Pid ! test.
test
所以我的問題是,你可以發送郵件到PIDS形式< 0.0.0>與出皆稱在殼體中的原子或變量?試驗和檢索證明是徒勞的...
確實。要麼你有辦法在你的代碼流中以某種方式檢索Pid(例如將它保持在你的循環/進程狀態),或者你需要註冊它來再次找到它。您也可以將PID存儲在數據庫中(例如ETS或Mnesia,在內存中)。 – 2014-12-01 21:06:04
我曾經使用過ETS跟蹤過程,似乎是一個很好的方法,因爲我是新來的Erlang,所以有一些好的意見。感謝您的澄清 – Opentuned 2014-12-01 21:40:23
@Opentuned如果您以前發現ETS表對此有用,您可能需要查看「pg2」(http://www.erlang.org/doc/man/pg2.html,http:// pdincau.wordpress.com/2012/01/12/a-survival-guide-on-pg2-erlang-module/),'global'(http://www.erlang.org/doc/man/global.html)和'gproc'(https://github.com/uwiger/gproc)。 – zxq9 2014-12-01 22:58:04