Elixir 如何从elixr phoenix framework应用程序中的另一个节点访问驻留在节点中的状态?
从另一个节点访问节点状态的最佳方式是什么? 我有一个用Phoenix框架(elixir Phoenix)开发的应用程序。我想在多个节点上运行这个应用程序来管理流量。我正在利用phoenix提供的套接字的功能,因此该应用程序创建了许多套接字 我们的应用程序需要存储用户的状态信息。在他的帮助下,我创建了一个监视程序,在监视程序的状态下维护状态信息。我必须通过访问状态信息来检查用户是否在线 当我进行多节点设置时,用户可能连接到任何节点。在这种情况下,要检查用户的在线状态,我需要从所有节点访问状态信息。这次行动将会非常频繁 实现跨节点状态访问的最佳方法是什么 ETS在这里有什么帮助吗 我可以使用Elixir 如何从elixr phoenix framework应用程序中的另一个节点访问驻留在节点中的状态?,elixir,phoenix-framework,Elixir,Phoenix Framework,从另一个节点访问节点状态的最佳方式是什么? 我有一个用Phoenix框架(elixir Phoenix)开发的应用程序。我想在多个节点上运行这个应用程序来管理流量。我正在利用phoenix提供的套接字的功能,因此该应用程序创建了许多套接字 我们的应用程序需要存储用户的状态信息。在他的帮助下,我创建了一个监视程序,在监视程序的状态下维护状态信息。我必须通过访问状态信息来检查用户是否在线 当我进行多节点设置时,用户可能连接到任何节点。在这种情况下,要检查用户的在线状态,我需要从所有节点访问状态信息。
Genserver.call({node,name},:identifier)
获取状态吗?这是阻塞呼叫吗?这会使节点变慢吗
还有其他有效的方法吗?您需要公开希望通过API与其他节点共享的信息。在这种情况下,每个节点都需要一个API来向其他节点公开用户状态。您可以从两个方面解决此问题:
在您的特定情况下,第一个选项——当用户在线时发送通知——似乎更适合您。具体实现可能取决于您希望如何使用该信息。为什么不在单个节点上运行watcher?让登录/注销事件向该观察者发送消息。然后,您只需要监视一个观察者。@GavinBrelstaff:如果您对单点故障的风险感到满意,那么这就行了。在实现级别上,
:pg2
组将是一种适当的广播机制(如您的第一种方法)。在每个节点上,向组订阅一个ETS支持的GenServer,然后每个节点可以在用户状态发生变化时向组成员广播。然后,每个节点都有自己的用户状态信息副本。