假设我有一个包含实时数据仪表板的 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_state
和presence_diff
事件。
然而:
Presence.list(socket)
调用时我不能使用send_update
,因为我是从无法访问的控制器调用它socket
- 当我打电话时,
Presence.list(MyApp.DashboardChannel, "dashboard")
我得到一个** (EXIT) no process
fromGenServer
。我是否误解了如何使用它?