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}).