CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT对同一服务器的良好生产值

时间:2018-05-14 14:33:54

标签: php curl php-curl

我希望我的问题不是太随意:在我的生产服务器上,我有一个页面通过cURL向同一台服务器上的另一个应用程序发送API调用。

我想在CURLOPT_CONNECTTIMEOUT然后CURLOPT_TIMEOUT设置适当的值,以便在有大量请求的情况下留出足够的时间来确保请求完成,但同时我不想要在API停机或响应时间过长的情况下挂起的页面,这会导致所有用户出现严重延迟,因为会产生巨大的阵容。

API提供了一个非常快速的数据库查询,返回一个小的json结构,没有什么复杂的,需要花费很多时间。

鉴于这些规格,任何人都可以对此发表评论?我目前有:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);

更新

  • API是全新的,仅供我使用
  • API是获取所有数据的关键。如果API不起作用,则无效,我会显示错误消息
  • 在每个页面上运行API以获取所需数据

2 个答案:

答案 0 :(得分:1)

在定义这些值时,您需要考虑许多因素。但是,对于HTTP请求(第一个字节),2秒被认为是可接受的。如果您管理HTTP请求所在的服务器,那么您还应该考虑服务器资源,例如内存,CPU,IO,Web服务器配置。但一般来说,您应该考虑将traceroute运行到终点以更好地理解延迟 - 这将帮助您为CURL定义更准确的超时值。当然,如果您从客户端发起许多请求,最后您应该考虑前面提到的服务器的相同资源限制。

希望这有帮助!请访问博客:https://www.inmotionhosting.com/support/website/how-to/read-traceroute

答案 1 :(得分:1)

您需要获得有关该API行为的信息才能做出明智的决定。它还取决于代码中API的使用方式以及失败时的行为。

考虑:

  • 如果您将值设置得太低,如果API由于某种原因需要更长时间来响应,则代码将失败。
  • 如果API响应时间超过~4秒,那意味着什么?
    • API完全崩溃了吗?那么你确实不需要等待更久。
    • 是否超负荷?那么它会在 5 秒内响应吗? 6? 10?这个超载状态会持续多久?通过多次重载来复合它是不是很糟糕,还是最好早点中止代码并让API恢复?
    • 是否有临时网络hickup?如果你超时 5 秒,这会解决吗? 10? 20?网络通常有多可靠?
  • 如果API由于上述任何原因导致响应缓慢,您是否希望自己的应用
  • 你可以保证 API的某个响应时间,如果它没有保证这意味着它已经失效了吗?
  • 面向用户的网站的目标响应时间是什么?

    网络超时通常在30到120秒之间,这可以补偿临时网络问题,但仍然在人类的范围内。用户的注意力通常会在几百毫秒后漂移,因此您需要将响应时间保持在一秒钟之内。但是,必须等待网站加载几秒钟并不罕见。

如果您需要调整这样一个关键参数来找到最佳设置,那么务实的方法是将其设置为某个初始值,使用一些测量工具来监控吞吐量和响应率,并启动压力模拟预期生产水平负荷的测试。然后,您将看到您的错误和响应率上升或下降,并可以调整设置,直到找到满足您所需约束的值。