9

当以编程方式发出 HTTP POST 请求时,什么超时值是合理的?

就我而言,我希望在 PHP 中发出 POST 请求时设置“合理的”超时值,但这适用于任何语言。

我需要能够发出一组请求,每个请求都发送到用户指定的 URL。如果我确实需要连续而不是同时处理请求,我想指定一个合理的时间,超过该时间请求被视为超时。

PHP 的默认套接字超时为 60 秒。在决定一个请求不会完成之前,这似乎是一个不必要的等待时间。

由于这些是 POST 请求,它们应该快速完成 - 没有数据可以像 GET 请求一样被检索和返回。

在大多数情况下,我们应该能够假设,未能在 X 秒内对请求发出响应意味着主机不太可能在合理的时间内对 X 的值显着小于 60 发出响应。

当然,主机很少需要超过 60 秒的时间来响应一个简单的 POST 请求。他们甚至很少需要超过 10 秒的时间吗?5秒?

在实践中 X 的合理值是多少?伴随建议的理由将是非常有益的。

4

2 回答 2

5

我建议设置一个测试,因为涉及的因素太多,无法给出一个始终合理的值。

POST 请求发送要处理的数据。处理需要多长时间?这将是特定于应用程序/数据的。

主机在哪里?用户正在提供 URL,所以这将是未知的。我们无法知道您的应用程序和主机之间的流量是什么样的。我们无法知道主机的服务器负载。

本质上,没有通用的合理超时。您必须根据自己的具体需求做出最佳判断。设置测试并使用它来确定您的限制。

于 2008-10-04T23:31:57.243 回答
2

大多数库都有连接超时和读取超时。也就是说,尝试连接到远程服务器之间的超时,以及发送请求后的超时,他们应该等待响应。

如果这是本地 Web 服务,我会将连接超时设置为低 1 秒或更短(如果您的库支持)。如果您要连接的远程服务不可用恕我直言,最好立即向用户返回响应,而不是让您的所有工作线程阻塞该远程服务,从而导致其他上游错误。

至于读取超时,这更棘手,您需要将其设置为低,这样您就不会耗尽等待远程服务返回的工作人员池,但您也不希望它太低以至于它关闭读取响应之前的连接。这是您必须测试的内容,然后在您的系统投入生产时将其作为指标进行跟踪。

于 2008-10-05T03:40:53.297 回答