当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang multicall(Nodes, Module, Function, Args, Timeout)用法及代码示例


multicall(Nodes, Module, Function, Args, Timeout) ->
             {ResL, BadNodes}
类型:
Nodes = [node()]
Module = module()
Function = atom()
Args = [term()]
Timeout = 0..4294967295 | infinity
ResL = [Res :: term() | {badrpc, Reason :: term()}]
BadNodes = [node()]

与 RPC 不同,多重调用是从一个客户端同时发送到多个服务器的 RPC。这对于从一组节点收集信息或在一组节点上调用函数以实现一些副作用非常有用。它在语义上与在所有节点上迭代地进行一系列 RPC 相同,但多重调用速度更快,因为所有请求都是同时发送的,并在返回时被逐一收集。

该函数在指定节点上评估apply(Module, Function, Args) 并收集答案。它返回 {ResL, BadNodes} ,其中 BadNodes 是不存在的节点列表,ResL 是返回值列表,或 {badrpc, Reason} 表示失败的调用。 Timeout 是以毫秒为单位的时间(整数),或 infinity

当新的目标代码要加载到网络中的所有节点上时,以下示例非常有用,并指出了 RPC 可能产生的一些副作用:

%% Find object code for module Mod
{Mod, Bin, File} = code:get_object_code(Mod),

%% and load it on all nodes including this one
{ResL, _} = rpc:multicall(code, load_binary, [Mod, File, Bin]),

%% and then maybe check the ResL list.
注意

如果您希望能够区分结果,您可能需要考虑使用multicall(Nodes, Module, Function, Args)函数从erpc模块代替。

注意

您不能对执行 apply() 的进程做出任何假设。它可能是调用进程本身、rpc 服务器、另一个服务器或新生成的进程。

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 multicall(Nodes, Module, Function, Args, Timeout) -> {ResL, BadNodes}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。