凤凰城存在:迭代连接用户以响应事件?

时间:2016-11-11 21:50:11

标签: phoenix-framework phoenix-channels

假设我有一个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。我已经添加了as the docs show,并且已成功在浏览器中收到presence_statepresence_diff个事件。

然而:

  • 在致电Presence.list(socket)时我无法使用send_update,因为我是从无法访问socket
  • 的控制器调用它的
  • 当我致电Presence.list(MyApp.DashboardChannel, "dashboard")时,我会从** (EXIT) no process获得GenServer。我误解了如何使用它吗?

0 个答案:

没有答案