Phoenix - return Ecto 查询结果到特定客户端

Phoenix - return Ecto query results to a specific client

我目前正在尝试设计一个发生以下情况的方案。

客户 A 是 subscribed/connected 到 topic/channel T

Aselect 查询的形式向 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

如果你想return所有加入主题的用户的查询结果,你可以简单地使用broadcast而不是push,参见文档here