gpt4 book ai didi

phoenix-framework - 何时在 Phoenix Channel 中使用 { :noreply, socket} 与 { :reply, :ok, socket}?

转载 作者:行者123 更新时间:2023-12-05 06:38:58 24 4
gpt4 key购买 nike

我正在构建一个与 Phoenix 服务器进行实时通信的 Javascript 客户端应用程序,并想知道是否已收到推送到服务器的消息。看起来 Phoenix 的 socket.js 要我使用类似的东西:

channel.push("mymessage", {data: 123})
.receive("ok", function(){ console.log("Message pushed successfully"); });

但是,除非我将 Phoenix 应用程序上的返回值更改为 {:reply, :ok, socket},否则我无法触发此事件处理程序,如下所示:

  def handle_in("mymessage", %{"data" => data} = payload, socket) do
{:reply, :ok, socket}
# not {:noreply, socket}
end

我想 {:noreply, socket} 实际上并没有发送消息来响应客户端是有道理的,但是在什么情况下你想向服务器发送消息并且没有让您知道它有效吗?还是我误会了什么?我觉得对于普通的 HTTP 请求,您总是检查来自客户端的请求是否成功。

最佳答案

你是对的:{:reply, :ok, socket} 将发送 reply message使用 "ok"{:noreply, socket} 不会发送任何响应。如果您想确保消息已发送,您应该使用前者,但这通常是不切实际或不必要的(考虑向数千个连接的用户广播聊天消息——跟踪所有用户的“确认”消息是不切实际的)。

I feel like with normal HTTP requests, you always check if the request was successful from the client.

WebSockets 存在于普通 HTTP 请求无法正常工作的情况下,单向通信就是其中一种情况。

关于phoenix-framework - 何时在 Phoenix Channel 中使用 { :noreply, socket} 与 { :reply, :ok, socket}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45291049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com