我知道,你可以简单的瓶坯消息如下传递:是否可以向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