我目前正在尝试设计一个发生以下情况的方案。
客户端 A
订阅/连接到主题/ channel T
。
A
以 select
查询的形式向 T
发送消息。
只有A
收到查询结果,没有其他订阅者。
这甚至可以使用 channel 吗?我选择 Channels 的主要原因是出色的 websocket 支持——但是我对其他 Phoenix 解决方案持开放态度。
最佳答案
是的, channel 应该做你想要的工作。您可以使用 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
,参见文档here
关于elixir - Phoenix - 将 Ecto 查询结果返回给特定的客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37373766/