gpt4 book ai didi

Erlang:远程调用与发送消息

转载 作者:行者123 更新时间:2023-12-04 13:14:07 27 4
gpt4 key购买 nike

我想在远程节点上执行一些程序。而且我不确定哪种方法是最好的方法。我可以写一个rpc:call去做这个。或通过 Remote ! {call, some_procedure} 发送消息到节点启动程序并使用receive等待回复。那么在erlang中哪种方式更好?或者它们实际上是为了不同的用途?

最佳答案

最好使用模块rpc ,因为如果你不这样做:你必须管理远程节点的监控,必须提供唯一的调用 id,处理超时,你还必须提供包装器以返回带有函数结果的响应。

但是所有这些操作都是通用的 ,并在 rpc 中实现模块。

顺便说一下,远程调用有不同的变体,在 rpc 中实现: 同步异步调用 , Actor (发送不需要响应的消息),甚至是并行映射函数( pmap )。

附言

比较 - 只需使用 rpc:call与从头开始实现(同样,这是简单的实现,它不处理一些重要的情况):

-module(myrpc).
-compile(export_all).

server() ->
receive
{{CallerPid, Ref}, {Module, Func, Args}} ->
Result = apply(Module, Func, Args),
CallerPid ! {Ref, Result}
end.

call(Node, Module, Func, Args) ->
monitor_node(Node, true),
RemotePid = spawn(Node, ?MODULE, server, []),
Ref = make_ref(),
RemotePid ! {{self(), Ref}, {Module, Func, Args}},
receive
{Ref, Result} ->
monitor_node(Node, false),
Result;
{nodedown, Node} ->
error
end.

关于Erlang:远程调用与发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12508539/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com