服务器之间的PHP cURL问题,返回传输可能不会捕获响应

时间:2013-10-10 23:06:22

标签: php curl overloading

我有一种非常奇怪的行为。

我正在为用户托管跟踪软件,主要记录移动流量。现在,路径如下:

1。我的客户端获取一个PHP代码片段放入他的网站。

2. 此代码将cURL帖子(基于预定义的帖子字段,如:visiotr IP,useragent,host等)发送到我的服务器。

3。我的服务器记录数据,并确定风险等级。

4. 然后它会响应客户端服务器的状态。也就是说,它将“true”或“false”发送回客户端服务器。

5. 客户端服务器获取该r esponse,并决定做什么(加载不同的HTML内容,重定向,阻止访问者等)。

我面临的问题是,由于某种原因,我的客户端服务器向我的服务器发出的所有请求都被记录并存储在日志文件中,但是我的客户端报告了点击丢失,就像我的服务器发送回来一样响应,但他们的服务器无法收到这些回复或其他什么。

我可能会注意到,不同客户的服务器和每个客户自己每分钟都有大量的请求。

原因是否与CURL_RETURNTRANSFER没有得到任何响应有关?或者,问题可能是cURL重载?

我真的不知道。我的服务器非常快,只使用了10%的资源。

提前感谢您的想法。

1 个答案:

答案 0 :(得分:1)

你触及了非常有问题的域 - 高负载服务器,你的问题可能在很多地方,所以你必须花时间来修复它,或者至少部分修复它。

首先,你应该了解到底发生了什么,看看这个简化的方案:

  1. 客户端的php代码尝试打开与服务器的连接,为此通过网络将一些数据发送到您的服务器
  2. 您的服务器(我想是apache)尝试接受它,如果它有资源 - 检查apache config中的最大连接属性
  3. 如果服务器可以接受连接,它会尝试创建新线程(或使用线程池中的一个)
  4. 线程启动后,它会运行您的php脚本
  5. 你的php脚本做了一些工作,连接到db并通过网络发回响应
  6. 客户端等待p5的答案或因超时而关闭连接
  7. 所以,在每一点上你都有瓶颈:

    1. 网络带宽
    2. Max打开连接
    3. 线程池大小
    4. 脚本执行时间
    5. 最大数据库连接,表锁,等待时间
    6. 客户超时
    7. 并不是可能出现问题的地方的完整列表,最终导致空卷曲响应。

      我从一开始就建议您将日志记录添加到PHP代码(客户端和服务器)并将所有curl_error问题存储在某个文本文件中,至少您会看到经常出现的问题。