Process 向不同节点上的进程广播
我有一个功能可以进行广播:Process 向不同节点上的进程广播,process,erlang,broadcast,Process,Erlang,Broadcast,我有一个功能可以进行广播: broadcast(Msg, Reason) -> Fun = fun(P) -> P ! {self(), Msg, Reason} end, %line 27 lists:foreach(Fun, nodes()). 但它不起作用,我得到这个错误: =ERROR REPORT==== 12-Apr-2014::15:42:23 === Error in process <0.45.0> on node 'sub@Molly
broadcast(Msg, Reason) ->
Fun = fun(P) -> P ! {self(), Msg, Reason} end, %line 27
lists:foreach(Fun, nodes()).
但它不起作用,我得到这个错误:
=ERROR REPORT==== 12-Apr-2014::15:42:23 ===
Error in process <0.45.0> on node 'sub@Molly' with exit value: {badarg,[{subscri
ber,'-broadcast/2-fun-0-',3,[{file,"subscriber.erl"},{line,27}]},{lists,foreach,
2,[{file,"lists.erl"},{line,1323}]},{subscriber,loop,0,[{file,"subscriber.erl"},
{line,38}]}]}
我不能对这个错误耿耿于怀。为什么这不起作用?节点只是一个原子,您不能向它发送消息。您需要的是该节点上的pid。例如,它可以是一个已注册的进程,并且可以通过调用rpc:call(Node,erlang,其中,[Name])获得pid。另一种选择是使用gproc。节点只是一个原子,您不能向它发送消息。您需要的是该节点上的pid。例如,它可以是一个已注册的进程,并且可以通过调用rpc:call(Node,erlang,其中,[Name])获得pid。另一种选择是使用gproc。
代码>采用与相同的参数。该文档指定目标可以是以下之一:
- pid
- 港口
- atom,表示在本地节点上注册的进程
{RegName,Node}
,用于在远程节点上注册的进程
您正在向节点()的返回值的元素发送消息。这些是原子,但它们是节点名,而不是本地注册的进程。如果要将消息发送到的进程在远程节点上注册为foo
,请写入{foo,P}!{self(),Msg,Reason}
另一方面,如果远程节点上有进程的PID,则无需指定节点名称,因为PID包含该信息。只需将消息发送到远程pid,就像发送本地pid一样。代码>采用与相同的参数。该文档指定目标可以是以下之一:
- pid
- 港口
- atom,表示在本地节点上注册的进程
{RegName,Node}
,用于在远程节点上注册的进程
您正在向节点()的返回值的元素发送消息。这些是原子,但它们是节点名,而不是本地注册的进程。如果要将消息发送到的进程在远程节点上注册为foo
,请写入{foo,P}!{self(),Msg,Reason}
另一方面,如果远程节点上有进程的PID,则无需指定节点名称,因为PID包含该信息。只需将消息发送到远程pid,就像发送本地pid一样
broadcast(Reason, Msg)