来自 Phoenix Channel 的广播如何影响其他节点上的客户端?
How does broadcasting from a Phoenix Channel hit clients on other nodes?
在使用 WebSockets 时,我正在尝试将 Phoenix Channels 与新 Rails ActionCable 进行比较。
在某些情况下,ActionCable 在向所有客户端广播消息时使用 Redis 来处理 PubSub。示例场景:单独节点上的 3 个 rails 进程中的 1 个将能够广播到所有 Web 服务器上连接的客户端。这是通过点击 Redis 来完成的,Redis 依次发布到所有 rails 服务器,然后服务器推送到所有连接的客户端。
我最近了解到 2 million websocket connections achieved by Phoenix websocket 连接。
还发现了这个 gem:
Phoenix 1.0 发行说明提到了有关渠道的这一点:
Even on a cluster of machines, your messages are broadcasted across
the nodes automatically
Phoenix 如何跨节点向客户端广播?它是否在幕后使用邮箱 and/or 一些其他进程间通信?
这类似于中的问题2)。
谢谢!
Phoenix 的 PubSub 层是单独使用标准库实现的。 Erlang VM 的并发模型是开箱即用的。因此,无论您是在本地 send(some_local_pid, :a_message)
还是全局 send(some_pid_on_another_machine, :a_message)
发送消息,mailbox/messaging 模型都可以正常工作。这是 Elixir 和 Erlang 的惊人之处之一,它允许 Phoenix 像 Redis 一样摆脱依赖。如果您对 Phoenix 的 PubSub 系统如何在其实施中利用这些功能感到好奇,请参阅此博客 post:
tldr;我们使用本地 ETS 表来保存节点本地进程的 PubSub 订阅,并且我们使用单个 :pg2
组在节点间广播,每个 PubSub.Local
服务器都是该组的成员。当 PubSub.Local
服务器收到广播时,它通过查找本地 ETS 订阅将消息转发给本地所有订阅者。实际的 IPC 细节和节点<->节点通信完全由运行时处理。
在使用 WebSockets 时,我正在尝试将 Phoenix Channels 与新 Rails ActionCable 进行比较。
在某些情况下,ActionCable 在向所有客户端广播消息时使用 Redis 来处理 PubSub。示例场景:单独节点上的 3 个 rails 进程中的 1 个将能够广播到所有 Web 服务器上连接的客户端。这是通过点击 Redis 来完成的,Redis 依次发布到所有 rails 服务器,然后服务器推送到所有连接的客户端。
我最近了解到 2 million websocket connections achieved by Phoenix websocket 连接。
还发现了这个 gem: Phoenix 1.0 发行说明提到了有关渠道的这一点:
Even on a cluster of machines, your messages are broadcasted across the nodes automatically
Phoenix 如何跨节点向客户端广播?它是否在幕后使用邮箱 and/or 一些其他进程间通信?
这类似于
谢谢!
Phoenix 的 PubSub 层是单独使用标准库实现的。 Erlang VM 的并发模型是开箱即用的。因此,无论您是在本地 send(some_local_pid, :a_message)
还是全局 send(some_pid_on_another_machine, :a_message)
发送消息,mailbox/messaging 模型都可以正常工作。这是 Elixir 和 Erlang 的惊人之处之一,它允许 Phoenix 像 Redis 一样摆脱依赖。如果您对 Phoenix 的 PubSub 系统如何在其实施中利用这些功能感到好奇,请参阅此博客 post:
tldr;我们使用本地 ETS 表来保存节点本地进程的 PubSub 订阅,并且我们使用单个 :pg2
组在节点间广播,每个 PubSub.Local
服务器都是该组的成员。当 PubSub.Local
服务器收到广播时,它通过查找本地 ETS 订阅将消息转发给本地所有订阅者。实际的 IPC 细节和节点<->节点通信完全由运行时处理。