0
阅读gproc文档,它看起来像Key
用于路由消息到不同的进程,所以我不知道如何在文档中工作的示例,因为它似乎使用不同的键为注册和发送消息。pub/sub与gproc - 模块是什么?
在gproc文档,它们提供执行发布/订阅的以下示例:
subscribe(Event) ->
gproc:reg({p, l, {?MODULE, Event}}).
publish(Event, Data) ->
gproc:send({p, l, {?MODULE, Event}}, {?MODULE, Event, Data}).
的gproc:send
第二参数:{?MODULE, Event, Data}
,不会使所述消息不同的基于哪个模块发送事件?
因此,举例来说,如果我订阅foo_bar
类型的事件从模块1:
pub_sub:subscribe(foo_bar).
,然后发布从模块2事件:
pub_sub:publish(foo_bar, {color, "Blue"}).
的呼叫GPROC的第一个电话会:
gproc:reg({p, l, {module1, foo_bar}}).
而第二个:
gproc:send({p, l, {module2, foo_bar}}, {module2, foo_bar, {color, "Blue}}).
所以它看起来像密钥不同:{p, l, {module1, foo_bar}}
和{p, l, {module2, foo_bar}}
,并模块1将永远不会收到该消息。
或者我错过了什么?
P.S:有一个稍微不同的语法here,但我还是看到了同样的问题:
subscribe(EventType) ->
%% Gproc notation: {p, l, Name} means {(p)roperty, (l)ocal, Name}
gproc:reg({p, l, {?MODULE, EventType}}).
notify(EventType, Msg) ->
Key = {?MODULE, EventType},
gproc:send({p, l, Key}, {self(), Key, Msg}).