Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 凤凰频道的广播如何影响其他节点上的客户端?_Elixir_Phoenix Framework_Actioncable - Fatal编程技术网

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

Elixir 凤凰频道的广播如何影响其他节点上的客户端?,elixir,phoenix-framework,actioncable,Elixir,Phoenix Framework,Actioncable,我试着比较凤凰频道和新频道在使用WebSocket时的表现 对于某些上下文,ActionCable在向所有客户端广播消息时使用Redis处理PubSub。示例场景:一个单独节点上的3个rails进程中的1个将能够广播到所有web服务器上连接的客户端。这是通过点击Redis来实现的,Redis反过来发布到所有rails服务器,然后这些服务器推送到所有连接的客户端 我最近读到了关于websocket连接的文章 还发现了这个宝石: Phoenix 1.0发行说明中提到了以下有关频道的内容: 即使在一组

我试着比较凤凰频道和新频道在使用WebSocket时的表现

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

我最近读到了关于websocket连接的文章

还发现了这个宝石: Phoenix 1.0发行说明中提到了以下有关频道的内容:

即使在一组机器上,您的消息也会在多个计算机上广播 节点将自动删除

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

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


谢谢

Phoenix的PubSub层仅通过标准库实现。ErlangVM的并发模型是现成的。因此,无论您是在本地发送邮件
send(一些本地邮件,:a邮件)
还是在全局发送邮件
send(另一台机器上的一些邮件,:a邮件)
,邮箱/消息模型都能正常工作。这是Elixir和Erlang的神奇之处之一,它让Phoenix摆脱了像Redis这样的依赖。如果您对Phoenix的PubSub系统在其实现中如何利用这些功能感到好奇,请参阅以下博文:


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

谢谢!这一切听起来都很棒。我很好奇web服务器是如何相互了解以实现对等广播的,但我将把这一点留给我自己的研究。这个模型似乎也适用于工作队列。一个真正的phoenix后台工作框架不会像sidekiq或其他应用程序那样使用redis,而是会使用这种方法。这是为下一个路过的读者准备的。每个节点(在本例中为webserver)都知道如何与其他节点通信,因为它们将应用程序部署为分布式系统。点击下面的链接了解更多详细信息:感谢Chris的解释。我正在检查
pg2
文档,似乎计划在OTP 24中删除,并引入
pg
替换,这对凤凰城有影响吗?