我有两个相互连接的节点,其中一个是服务器。服务器想知道客户端是否死亡。我做了这样的事情:
link(Client).
在服务器进程中,当我这样做时,我收到一个异常错误:noconnection然后服务器终止,当客户端死亡时。我只想知道客户端是否死机,我不希望服务器死掉,我该如何处理死亡消息?
答案 0 :(得分:2)
如果您有两个erlang节点,并且想要采取某些操作以防一个节点出现故障(或网络连接丢失),您可能希望使用erlang:monitor_node/2,3
函数:
(n1@myhost)1> erlang:monitor_node('n2@myhost', true).
true
然后,如果'n2@myhost'
节点关闭,您的进程将收到消息:
(n1@myhost)2> flush().
Shell got {nodedown,n2@myhost}
(注意,我是从erlang shell那样做的,这就是为什么我可以调用flush/0
来查看shell进程邮箱中的内容)
如果您对某个流程感兴趣,可以在第二个节点上使用erlang:monitor/2
(n1@myhost)3> Ref = erlang:monitor(process, {'n2@myhost', some_registered_name}).
#Ref<0.0.0.117>
从现在起,如果some_registered_name
发生故障,您将收到一条消息,您可以采取行动。
您也可能对如何撰写distributed applications
感兴趣答案 1 :(得分:1)
要进行单向监督,您应该使用monitors。然后,如果客户端死亡,您的服务器将收到一条消息。