Phoenix Channel的广播如何击中其他节点上的客户端?

dim*_*roc 8 elixir phoenix-framework actioncable

在使用WebSockets时,我正在尝试将Phoenix Channels与新的Rails ActionCable进行比较.

对于某些上下文,ActionCable在向所有客户端广播消息时使用Redis来处理PubSub.示例场景:单独节点上的3个rails进程中的1个将能够广播到所有Web服务器上连接的客户端.这是通过点击Redis完成的,Redis又发布到所有rails服务器,然后推送到所有连接的客户端.

我最近读到了关于Phoenix websocket连接实现200万个 websocket连接.

还发现了这个宝石:Phoenix 1.0发行说明提到了有关频道的信息:

即使在一组计算机上,您的消息也会自动在节点间广播

Phoenix如何能够跨节点向客户端广播?它是否在引擎盖下使用邮箱和/或其他一些进程间通信?

这类似于在这个问题2)职位.

谢谢!

Chr*_*ord 14

Phoenix的PubSub层仅使用标准库实现.Erlang VM的并发模型是开箱即用的.因此,邮箱/消息传递模型Just Works,您在本地send(some_local_pid, :a_message)或全局发送消息send(some_pid_on_another_machine, :a_message).这是关于Elixir和Erlang的令人惊奇的事情之一,它允许凤凰城摆脱像Redis这样的依赖.如果您对Phoenix的PubSub系统在其实现中如何利用这些功能感到好奇,请参阅此博客文章:

http://www.zohaib.me/guts-of-phoenix-channels/?utm_campaign=elixir_radar_28&utm_medium=email&utm_source=RD+Station

tldr; 我们使用本地ETS表来保存节点本地进程的PubSub订阅,并使用:pg2每个PubSub.Local服务器所属的单个组跨节点进行广播.当PubSub.Local服务器收到广播时,它通过查找本地ETS订阅在本地将消息转发给所有订户.实际的IPC细节和节点< - >节点通信完全由运行时处理.

  • 这是为了下一位读者经过.每个节点(在本例中为webserver)都知道如何与其他节点通信,因为它们将应用程序部署为分布式系统.点击以下链接了解更多详情:http://benjamintan.io/blog/2014/05/25/connecting-elixir-nodes-on-the-same-lan/ (2认同)