2

假设我有一个包含实时数据仪表板的 Phoenix 应用程序。

我有一个名为 的频道MyApp.DashboardChannel,只有一个主题dashboard

MyApp.DashboardChannel中,我有一个类似的功能:

  def send_update do
    MyApp.Endpoint.broadcast(
      "dashboard",
      "update",
      %{data: MyApp.get_dashboard_data}
    )
  end

每当发生更改仪表板中显示的数据的事情时,我都可以调用此函数来推出更新的版本。例如,在MyApp.TransactionController.create保存交易后,我可以调用DashboardChannel.send_update以便每个人都可以看到新的交易。

现在,假设我想修改它,以便每个仪表板用户都获得自定义数据。本质上我想说的是:“对于每个连接的用户,使用他们运行查询user_id并将结果数据推送给他们。”

我怎样才能做到这一点?

我很确定答案将涉及Phoenix.Presence. 我已经将它添加为文档显示,并且成功地在浏览器中获取presence_statepresence_diff事件。

然而:

  • Presence.list(socket)调用时我不能使用send_update,因为我是从无法访问的控制器调用它socket
  • 当我打电话时,Presence.list(MyApp.DashboardChannel, "dashboard")我得到一个** (EXIT) no processfrom GenServer。我是否误解了如何使用它?
4

0 回答 0