如何处理Erlang中另一个节点的死亡?

如何处理Erlang中另一个节点的死亡?,erlang,Erlang,我有两个相互连接的节点,其中一个是服务器。服务器想知道客户端是否死亡。我是这样做的: link(Client). 在服务器进程中,当我这样做时,我收到一个异常错误:noconnection,然后当客户端死亡时,服务器死亡。我只想知道如果客户端死亡,我不希望服务器死亡,我如何处理死亡消息?要进行单向监控,您应该使用。如果客户端死亡,您的服务器将收到一条消息。如果您有两个erlang节点,并且希望在其中一个节点发生故障(或网络连接丢失)时采取一些措施,则可能需要使用erlang:monitor\u

我有两个相互连接的节点,其中一个是服务器。服务器想知道客户端是否死亡。我是这样做的:

link(Client).

在服务器进程中,当我这样做时,我收到一个异常错误:noconnection,然后当客户端死亡时,服务器死亡。我只想知道如果客户端死亡,我不希望服务器死亡,我如何处理死亡消息?

要进行单向监控,您应该使用。如果客户端死亡,您的服务器将收到一条消息。

如果您有两个erlang节点,并且希望在其中一个节点发生故障(或网络连接丢失)时采取一些措施,则可能需要使用
erlang:monitor\u 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>
(n1@myhost)3> Ref=erlang:monitor(进程,{'n2@myhost,有些人注册了。
#参考号
从现在起,如果
某个注册的\u name
出现故障,您将收到一条消息,您可以采取行动


此外,您可能对如何在服务器进程中写入

或陷阱出口感兴趣。