代码之家  ›  专栏  ›  技术社区  ›  NaturalBornCamper

CURLOPT\u CONNECTTIMEOUT和CURLOPT\u对同一服务器超时的良好生产值

  •  2
  • NaturalBornCamper  · 技术社区  · 7 年前

    我希望我的问题不要太武断:在我的生产服务器上,我有一个页面使用cURL向同一服务器上的另一个应用程序发送API调用。

    我想设置适当的值 CURLOPT_CONNECTTIMEOUT 然后 CURLOPT_TIMEOUT 如果有很多请求,我需要留出足够的时间来确保请求完成,但同时我不希望页面挂起,以防API关闭或需要太长时间才能响应,这将导致所有用户的严重延迟,因为会产生大量排队。

    该API进行了一个非常快速的DB查询,返回一个小的json结构,不需要花费太多时间。

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

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

    使现代化 :

    • API是全新的,仅供我使用
    • API是获取所有数据的关键。如果API不起作用,则什么都不起作用,我会显示一条错误消息
    • 在每个页面上运行API以获取所需的数据
    2 回复  |  直到 7 年前
        1
  •  1
  •   deceze    7 年前

    为了做出明智的决策,您需要了解该API的行为。这还取决于API在代码中的使用方式,以及在出现故障时需要的行为。

    考虑:

    • 如果您将该值设置得太低,那么如果API出于任何原因需要更长时间才能响应,那么代码将失败。
    • 如果API的响应时间超过4秒,这意味着什么?
      • API是否完全关闭?那你真的不需要再等了。
      • 是否超载?那么它会在 5. 第二6.10个?这种过载状态将持续多长时间?通过重载使其复合是不好的,还是尽早中止代码并让API恢复更好?
      • 是否有临时网络hickup?如果你超时了会解决问题吗 5. 秒数?10个?20个?网络通常有多可靠?
    • 您希望您的应用程序 缓慢的 死去的 如果API因上述任何原因响应缓慢?
    • 你能吗 保证 API的特定响应时间,如果它不能保证这一点,那就意味着它停机了?
    • 面向用户的站点的目标响应时间是多少?

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

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

        2
  •  1
  •   Michael Niño    7 年前

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

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

    推荐文章