我已经构建了 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/