作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用一个短名称启动一个主节点,并让它运行一个进程来监视节点启动和关闭消息。
> erl -sname master -cookie monster
Erlang R15B03 (erts-5.9.3) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false] [dtrace]
Eshell V5.9.3 (abort with ^G)
(master@pencil)1> c("/tmp/monitor.erl").
{ok,monitor}
(master@pencil)2> Pid = monitor:start().
<0.44.0>
(master@pencil)3> Pid ! running.
RECV :: running
running
(master@pencil)4> net_adm:names().
{ok,[{"master",52564}]}
master
节点正在运行。我在同一台机器上启动第二个节点:
> erl -sname client -cookie monster
Erlang R15B03 (erts-5.9.3) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false] [dtrace]
Eshell V5.9.3 (abort with ^G)
(client@pencil)1>
(master@pencil)5> net_adm:names().
{ok,[{"master",52564},{"client",52579}]}
(master@pencil)6>
-name
——这工作得很好。不过,我很惊讶,因为
net_kernel
文档没有提到这一点。这是怎么回事?
monitor.erl
以上引用:
-module(monitor).
-export([start/0]).
start() ->
spawn_link(fun init_loop/0).
%%%===================================================================
%%% Internal Functions
%%%===================================================================
init_loop() ->
net_kernel:monitor_nodes(true, []),
loop().
loop() ->
receive
Msg -> io:format(user, "RECV :: ~p~n", [Msg])
end,
loop().
最佳答案
net_kernel:monitor_nodes/2
绝对可以 为具有短名称和长名称的节点传递 nodeup/nodedown 消息。
然而,nodeup
如文档中所述,仅当节点连接时才会传递消息。为什么您会收到 nodeup
留言 -name
是个谜(不能在此处复制)为 net_adm:names/0
根本不连接节点。它只连接到 epmd 以获取本地注册节点的列表。它甚至会列出具有不同 cookie 的节点。
如果您使用 net_adm:ping/1
将客户端连接到主服务器(或相反) (或 rpc
调用),监控进程将收到 nodeup
信息。
关于erlang - 为什么net_kernel :monitor_nodes/2 not deliver nodeup/nodedown messages for sname nodes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940544/
我用一个短名称启动一个主节点,并让它运行一个进程来监视节点启动和关闭消息。 > erl -sname master -cookie monster Erlang R15B03 (erts-5.9.3)
我是一名优秀的程序员,十分优秀!