我正在尝试使用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}).