我正在尝试使用ERlang,Cowboy,Websocket和gen_bunny集成websocket聊天。

我能够让他们独立工作。

浏览器-> Cowboy websocket聊天(Works)
Erlang和RabbitMQ AMQP(Works)

将它们集成在一起时,我能够将消息从浏览器获取到Cowboy,并将其传递给RabbitMQ,然后再次从RabbitMQ重新获取。

我什至可以将邮件回复给发送邮件的用户。但是,我想将消息广播给所有连接的用户。

根据我的理解,Erlang将为每个用户创建一个单独的过程。那么,在我收到RabbitMQ的响应后如何将其广播给所有连接的用户?

最佳答案

看一下gproc项目:https://github.com/uwiger/gproc

它具有发布/订阅模式,可用于构建您提到的聊天。

从gproc的Wiki:

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

10-02 23:34