我目前正在尝试设计一个发生以下情况的方案。
客户端A
订阅/连接到主题/频道T
。
A
以select
查询的形式向T
发送消息。
只有A
接收查询结果,没有其他订阅者。
使用频道甚至可以做到这一点吗?我选择Channels的主要原因是出色的websocket支持 - 但是我对其他Phoenix解决方案持开放态度。
是的,频道应该做你想要的工作。您可以使用以下push
方法将查询结果向下推送给发送查询的用户:
def handle_in("new_query", %{"query" => query}, socket) do
# do the query and store the result into query_result
#return back the result using push to the user
push socket, "new_query", %{query_result: query_result}
{:ok, socket}
end
如果要将查询结果返回给加入该主题的所有用户,只需使用 broadcast
而不是 push
,请参阅此处的文档