當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。