有一段时间没有上过贴了。有部分原因是这几天没什么时间;不过主要的原因还是我找不到素材和近况在书上看到的
还是一知半解,所以不敢上贴。希望大家能继续跟帖,我会多加努力多找些好东西。
下面是我这次想介绍的,在本地调用和远程调用中主要是远程节点可能会失效,在《erlang编程指南》中有三种方法解决
1添加一个超时:
remote_call(Message,Node) ->
{facserver,Node} ! {self(),Message},
receive
{ok,Res} ->
Res
after 1000 ->
end.
2就是链接到服务器进程用到 spawn_link/4,跟spawn/4不同。
setup() ->
process_flage(trap_exit,true),
spawn_link('bar@ST',myrpc,server,[]).
3用monitor_node/2监控节点
remote_call(Message,Node) ->
monitor_node(Node,true),
{facserver,Node} ! {self(),Message},
receive
{ok,Res} ->
monitor_node(Node,false),
Res;
{nodedown,Node} ->
{error,node_down}
end.
我觉得第三种方法是monitor_node(Node,true),向远程监控发送了消息,远程的监控根据节点的
存在与否发送不同的消息回来,所以在调用了monitor_node(Node,true)后就必须用monitor_node(Node,false),
来接收远程发来的消息。
|