elixir - Phoenix - 将 Ecto 查询结果返回给特定的客户端

标签 elixir ecto channels phoenix-channels

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

客户端 A 订阅/连接到主题/ channel T

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

相关文章:

elixir - 如何在 elixir 项目上设置啤酒

firebase - 在哪里可以找到 JWT 签名所用的 key ?

postgresql - Elixir 的 Ecto 中 varchar(custom_size) 的 PostgreSQL 数组

Elixir Repo.insert_all/2 和唯一约束

go - : variable <-struct {}{}的含义

python - Django channel 。如何使用子协议(protocol)响应 WebSocket 打开请求?

elixir - 为什么我们不能在 Elixir 保护子句或宏中使用其他函数?

elixir - __struct__/1 未定义,无法扩展 struct Gazette.User

go - 通过 SSH 流式传输 Stdout 和 Stderr,操作流然后打印到本地 Stdout 和 Stderr

将 Elixir Phoenix 请求从根域重定向到 www