【发布时间】: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 好的,我会试一试,谢谢。调试起来特别棘手,因为我必须等待一段时间才能再次发生“长时间等待”。
-
“一定的时间”可能会因为一定数量的数据响应而发生,但这只是试图减少我们可能通过的方式来获得真正的原因。