凤凰频道的广播如何影响其他节点上的客户端



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

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

我最近读到关于Phoenix网络套接字连接实现的200万个网络套接字连接。

还发现了这颗宝石:Phoenix 1.0的发行说明提到了这一点,涉及频道:

即使在一组机器上,您的消息也会在节点自动

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

这与本文中的问题2)类似。

谢谢!

Phoenix的PubSub层仅使用标准库实现。Erlang虚拟机的并发模型是开箱即用的。因此,无论您是在本地send(some_local_pid, :a_message)还是在全局send(some_pid_on_another_machine, :a_message)发送邮件,邮箱/消息传递模型都能正常工作。这是关于长生不老药和二郎的惊人之处之一,它允许凤凰摆脱像Redis这样的依赖关系。如果你想知道Phoenix的PubSub系统是如何在实现中利用这些功能的,请参阅以下博客文章:

http://www.zohaib.me/guts-of-phoenix-channels/?utm_campaign=elixir_radar_28&utm_medium=电子邮件&utm_source=RD+车站

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

最新更新