【问题标题】:cURL proxy hangs for 30 seconds on the initial requestcURL 代理在初始请求时挂起 30 秒
【发布时间】:2017-07-28 20:13:24
【问题描述】:

首先,我将尝试解释我尝试调试的设置是如何工作的。

  • 首先,从客户端 (JavaScript) 发出 XHR/Ajax 请求。
  • 此请求被发送到 Windows/Apache/PHP 服务器
  • 此服务器充当代理,它接受请求、处理数据并将其代理到另一台服务器,使用 cURL
  • cURL 请求被发送到 Windows IIS 服务器,该服务器接受数据,并将一些值返回给 PHP 代理服务器
  • PHP 代理服务器对这些值进行一些处理,然后将它们返回给客户端 (JavaScript)

其他一些信息:

  • 这个 PHP cURL 代理的目的是它是一个单点登录身份验证 API。
  • 这个过程深受这个答案的启发:How youtube gets logged in to gmail account without redirect?
  • PHP cURL 代理充当存储身份验证令牌的单点登录 API。
  • Windows IIS 服务器是用户名/密码发送到的位置,并可能返回身份验证令牌。

问题:

在初始请求中,在返回响应之前有 30 秒的等待时间,这几乎就像服务器处于睡眠状态并需要唤醒一样。初始请求成功得到响应后,后续请求在不到 1 秒的时间内返回。如果在一段时间内(比如 30 分钟)没有发出请求,那么缓慢的初始请求会再次发生。

对 PHP Auth API 的直接请求永远不会有这么长时间的等待,Windows IIS 端点也是如此 - 但是当两者之间存在 cURL 时,就会发生长时间的等待。

任何人都可以在这里指出正确的方向吗?也许这是我没有考虑过的显而易见的事情? “保持连接活动”类型参数会有帮助吗?

我希望我已经正确解释了问题,如果需要更多信息,请询问。

谢谢堆栈溢出!

【问题讨论】:

  • 尝试使用curl_getinfo方法和CURLINFO_TOTAL_TIME跟踪你的curl请求时间
  • @HassanAhmed 好的,我会试一试,谢谢。调试起来特别棘手,因为我必须等待一段时间才能再次发生“长时间等待”。
  • “一定的时间”可能会因为一定数量的数据响应而发生,但这只是试图减少我们可能通过的方式来获得真正的原因。

标签: php ajax curl iis proxy


【解决方案1】:

您是否考虑过这是您“第一次”调用 API,API 本身可能刚刚进入休眠状态, 并且它自己的初始化有启动步骤,需要一些时间来运行。

【讨论】:

  • 是的 - 我已经考虑过了(引用我的 OP“这几乎就像服务器睡着了,需要醒来”),尽管这确实是最坏的情况,正如我所假设的那样' d是无法修复的东西。希望不是那样!
  • 基于与处理 .NET Auth Provider 方面的人员的进一步沟通,这正是问题所在。谢谢!
猜你喜欢
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
相关资源
最近更新 更多