gpt4 book ai didi

elixir - Phoenix channel 的广播如何影响其他节点上的客户端?

转载 作者:行者123 更新时间:2023-12-04 05:47:37 24 4
gpt4 key购买 nike

在使用WebSocket时,我正在尝试将Phoenix Channel与新的Rails ActionCable进行比较。

在某些情况下,在向所有客户端广播消息时,ActionCable使用Redis处理PubSub。示例方案:单独节点上的3个Rails进程中的1个将能够广播到所有Web服务器上连接的客户端。这是通过单击Redis来完成的,该Redis依次发布到所有Rails服务器,然后再推送到所有连接的客户端。

我最近阅读了有关2 million websocket connections achieved by Phoenix Websocket连接的信息。

还发现了这个 gem :
Phoenix 1.0发行说明中提到了有关 channel 的信息:

Even on a cluster of machines, your messages are broadcasted across the nodes automatically



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

这类似于 post中的问题2)。

谢谢!

最佳答案

Phoenix的PubSub层仅通过标准库实现。 Erlang VM的并发模型是现成的。因此,无论您是在本地send(some_local_pid, :a_message)还是在全局send(some_pid_on_another_machine, :a_message)上发送消息,邮箱/消息传递模型都可以正常工作。这是Elixir和Erlang的令人惊奇的事情之一,它使Phoenix摆脱了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详细信息和node <-> node通信完全由运行时处理。

关于elixir - Phoenix channel 的广播如何影响其他节点上的客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34258853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com