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


erlang send_request(Node, Module, Function, Args)用法及代碼示例


send_request(Node, Module, Function, Args) -> RequestId
OTP 23.0
類型:
Node = node()
Module = Function = atom()
Args = [term()]
RequestId = request_id()

發送異步call向節點請求Node.send_request/4返回一個請求標識符,稍後將傳遞給receive_response/2,wait_response/2, 或者,check_response/2為了得到調用請求的響應。除了將請求標識符直接傳遞給這些函數之外,還可以使用以下命令將其添加到請求標識符集合中:reqids_add/3。稍後可以使用這樣的請求標識符集合,以便通過將集合作為參數傳遞給receive_response/3,wait_response/3, 或者,check_response/3。如果您要將請求標識符保存在請求標識符集合中,您可能需要考慮使用send_request/6反而。

對函數的調用my_call(Node, Module, Function, Args, Timeout)下麵相當於調用erpc:call(Node, Module, Function, Args, Timeout)如果一個人忽視了績效。call()可以利用選擇性接收優化,無需從頭開始掃描消息隊列以查找匹配的消息。這send_request()/receive_response()然而,組合不能利用這種優化。

my_call(Node, Module, Function, Args, Timeout) ->
  RequestId = erpc:send_request(Node, Module, Function, Args),
  erpc:receive_response(RequestId, Timeout).

如果出現以下情況,則會失敗並出現 {erpc, badarg} error 異常:

  • Node 不是原子。

  • Module 不是原子。

  • Function 不是原子。

  • Args 不是列表。請注意,該列表未在客戶端驗證為正確的列表。

注意

您不能對執行 apply() 的進程做出任何假設。它可能是一個服務器,也可能是一個新生成的進程。

相關用法


注:本文由純淨天空篩選整理自erlang.org大神的英文原創作品 send_request(Node, Module, Function, Args) -> RequestId。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。