服务器之间的 PHP cURL 问题,返回传输可能不会捕获响应
Posted
技术标签:
【中文标题】服务器之间的 PHP cURL 问题,返回传输可能不会捕获响应【英文标题】:Issues with PHP cURL between servers, return transfer probably wont catch the response 【发布时间】:2013-10-10 23:06:21 【问题描述】:我有一个非常奇怪的行为。
我正在为用户托管一个跟踪软件,主要记录移动流量。现在,路径如下:
1. 我的客户获取了一个 php 代码 sn-p 以放入他的网站。
2. 此代码将 cURL 帖子(基于预定义的帖子字段,例如:visiotr IP、用户代理、主机等)发送到我的服务器。
3.我的服务器记录数据,并确定风险级别。
4. 然后它向客户端服务器响应状态。也就是说,它将“true”或“false”发送回客户端服务器。
5. 客户端服务器获取该 r 响应,并决定做什么(加载不同的 html 内容、重定向、阻止访问者等)。
我面临的问题是,出于某种原因,从我的客户服务器向我的服务器发出的所有请求都被记录并存储在日志文件中,但我的客户报告点击丢失,就好像我的服务器发回响应,但他们的服务器无法接收这些响应或其他东西。
我可能注意到,每分钟都有来自不同客户的服务器以及每个客户自己的大量请求。
原因可能与 CURL_RETURNTRANSFER 没有得到任何响应有关吗? 或者,问题可能是 cURL 过载?
我真的不知道。我的服务器非常快,并且只使用了 10% 的资源。
提前感谢您的想法。
【问题讨论】:
【参考方案1】:您触及了非常有问题的域 - 高负载服务器,您的问题可能出现在很多地方,因此您将不得不真正花时间修复它,或者至少部分修复它。
首先,你应该明白到底是怎么回事,看看这个简化的方案:
-
客户端的 php 代码尝试打开与您的服务器的连接,为此它通过网络向您的服务器发送一些数据
您的服务器(我想是 apache)尝试接受它,如果它有资源 - 检查 apache 配置中的最大连接数属性
如果服务器可以接受连接,它会尝试创建新线程(或使用线程池中的一个)
线程启动后,它会运行你的 php 脚本
你的 php 脚本做了一些工作,连接到 db 并通过网络发回响应
客户端等待来自 p5 的回答或因超时关闭连接
所以,在每一点你都可能遇到瓶颈:
-
网络带宽
最大打开连接数
线程池大小
脚本执行时间
最大数据库连接、表锁、io 等待时间
客户端超时
这不是可能发生问题并最终导致空卷曲响应的可能位置的完整列表。
从一开始,我建议您将日志记录添加到 PHP 代码(客户端和服务器)并将所有 curl_error 问题存储在某个文本文件中,至少您会看到经常发生的问题。
【讨论】:
感谢您的回答和详细的方案。我也将开始记录信息以上是关于服务器之间的 PHP cURL 问题,返回传输可能不会捕获响应的主要内容,如果未能解决你的问题,请参考以下文章