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


Elixir GenServer.multi_call用法及代码示例


Elixir语言中 GenServer.multi_call 相关用法介绍如下。

用法:

multi_call(nodes \\ [node() | Node.list()], name, request, timeout \\ :infinity)
@spec multi_call([node()], name :: atom(), term(), timeout()) ::
  {replies :: [{node(), term()}], bad_nodes :: [node()]}

调用在指定的 nodes 本地注册为 name 的所有服务器。

首先,request 被发送到 nodes 中的每个节点;然后,调用者等待回复。此函数返回一个二元素元组{replies, bad_nodes},其中:

  • replies - 是 {node, reply} 元组的列表,其中 node 是回复的节点,reply 是它的回复
  • bad_nodes - 是一个节点列表,这些节点或者不存在,或者具有给定 name 的服务器不存在或没有回复

nodes 是请求发送到的节点名称列表。默认值为所有已知节点(包括该节点)的列表。

为了避免迟到的答案(超时后)污染调用者的消息队列,中间人进程用于进行实际调用。当迟到的答案到达终止的进程时,它们将被丢弃。

例子

假设 GenServer 模块的文档中提到的 Stack GenServer 在 :"foo@my-machine":"bar@my-machine" 节点中注册为 Stack

GenServer.multi_call(Stack, :pop)
#=> {[{:"foo@my-machine", :hello}, {:"bar@my-machine", :world}], []}

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 GenServer.multi_call(nodes \\ [node() | Node.list()], name, request, timeout \\ :infinity)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。