elixir - 如何使用 Phoenix channel 直接回复用户的消息?

标签 elixir phoenix-framework

我已经构建了 Phoenix Channels docs 中显示的基本聊天应用程序。现在我想要一种通过只回复发件人来处理某些消息的方法。

例如,如果用户键入 /who ,则向他们(并且仅向他们)发送已连接用户的列表。

我怎样才能做到这一点?

最佳答案

在 Phoenix

匹配的 handle_in 函数头需要返回一个格式如下的响应: {:reply, {status :: atom, response :: map}, Socket.t}

例如:

  def handle_in("new_msg", %{"body" => "/who"}, socket) do
    user_list = UserList.get # or whatever
    {:reply, {:ok, %{kind: "private", from: "server", body: user_list}}, socket}
  end

(如果您将 handle_in 设置为返回垃圾,如空字符串,则产生的错误解释了可接受的返回值格式,这就是我学到的。)

在 JavaScript 中

当您 channel.push 时,只需链接 .receive 即可回复。
    channel.push("new_msg", {body: $chatInput.val()}).receive(
      "ok", (reply) => console.log("got reply", reply)
     )

( Thanks to Manuel Kallenbach for this answer 。)

关于elixir - 如何使用 Phoenix channel 直接回复用户的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37120226/

相关文章:

jquery - Phoenix channel 从项目外的客户端发送消息

elixir - 为什么我的动态定义函数未定义?

Erlang-Elixir : What is a supervision tree?

heroku - 在 Heroku 中为 Phoenix 框架设置 MIX_ENV

elixir - 如何更新 Phoenix 框架中 phoenix.gen.html 创建的文件?

mysql - 使用 Ecto (MySQL) 进行 upsert 的最简单方法是什么

elixir - Ecto中的多对多关系

elixir - 如何保存 IEx 历史记录?

elixir - 从管道插头调用时,Plug.Conn.assign 不起作用

elixir - Graphql Absinthe Elixir 基于权限的可访问字段