【发布时间】:2019-05-03 02:39:57
【问题描述】:
我的用例是让多个用户连接到大厅/候诊室,但只会从大厅中挑选其中两个开始对话,之后应将他们从大厅中删除。我该如何实施?请注意,在此系统中,用户没有注册,也没有用户名。他们应该直接从网页进来。
显然track 和untrack 函数也有接受pid 作为参数的变体。但是,当需要开始对话时,我不确定如何首先检索进程的 pid。
函数self() 在这种情况下使用正确吗?也就是说,也许我可以写
def handle_info(:after_lobby_join, socket) do
Presence.track(socket, "lobby", %{
pid: self()
})
{:noreply, socket}
end
def handle_info(:start, socket) do
pid1 = hd(Presence.list(socket)["lobby"][:metas])[:pid]
# Start the conversation by sending messages individually to pid1 and pid2
...
untrack(pid1, "my_app:lobby", "lobby")
{:ok, socket}
end
或者我是否使问题过于复杂/没有正确理解 Presence?
还有一个 phx_ref 字段,但我似乎无法将其用于此目的。
另外,显然我只想向被选中的两个用户发送"start_conversation" 消息,而不是大厅中的其他用户。我看到函数push 将消息发送到指定的套接字。但是如果我在跟踪 pid,是否可以从 pid 中识别出相应的套接字?
【问题讨论】:
标签: websocket elixir phoenix-framework user-presence