假设我有一个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_state
和presence_diff
个事件。
然而:
Presence.list(socket)
时我无法使用send_update
,因为我是从无法访问socket
Presence.list(MyApp.DashboardChannel, "dashboard")
时,我会从** (EXIT) no process
获得GenServer
。我误解了如何使用它吗?