gpt4 book ai didi

node.js - 延迟处理 Node 中传入的 HTTP 请求

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:28:36 25 4
gpt4 key购买 nike

我故意将其保持在高层次,因为我怀疑我在这里遗漏了一些基本概念。

我正在运行一个 Node/Express 服务器。我希望这个服务器有效地充当 throttle ,所以我想存储(在内存或其他进程中,如 Redis)incoming 稍后处理的 http 请求(使用 response.end())时间。这可能吗?

最佳答案

Is this possible?

是的,但有一些限制。

首先,如果您不打算更改发出请求的客户端的设计,您将必须在 HTTP 连接进入的套接字上做出响应。 HTTP 连接是从客户端到服务器的实时套接字连接。必须在该套接字上发送响应。这意味着如果您要在响应之前等待一段时间,您将必须保持该套接字处于事件状态并找到一种方法在套接字超时并放弃等待响应之前进行响应。浏览器都会设置某种客户端超时设置,如果在该时间内没有收到响应,它们将关闭套接字并假定请求不成功。您将不得不在比此超时更短的时间内做出响应,或者您将不得不通过缓慢地运球某种响应的点点滴滴来强制客户端延长它的超时时间,以使客户端认为数据即将到来(我没有我自己试过了)。

仅供引用,传入的连接不能“存储”在另一个进程或磁盘上。您必须在您的 Node/快速服务器中跟踪它们。


如果您可以更改客户端的设计,那么您可以做很多事情。例如,客户端可以发出一个请求,它立即得到的响应可能是一个唯一的 ID 和一个时间值。这告诉客户它的响应已被“推迟”到以后。同时,服务器存储请求并在预定的延迟时间之前的某个时间,它可以计算该响应。然后,当客户端再次 checkin 并请求对特定唯一 ID 的响应时,服务器可以返回该响应。


如果您可以使用 socket.io(或者甚至是普通的 webSocket)连接,那么您可以更轻松地完成它。由于基于 webSocket 的连接是持久的,客户端可以发出请求,稍后只要服务器愿意,它就可以将响应发送到该客户端的 webSocket 连接。

关于node.js - 延迟处理 Node 中传入的 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31644756/

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