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


Issues with PHP cURL between servers, return transfer probably wont catch the response

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

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

1. 我的客户得到一个 php 代码片段放在他的网站上。

2.此代码将cURL帖子(基于预定义的帖子字段,例如:visiotr IP,用户代理,主机等(发送到我的服务器。

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

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

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

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

我可能会注意到,每分钟都有来自不同客户端服务器以及每个客户端本人的大量请求。

原因是否与CURL_RETURNTRANSFER没有得到任何响应有关? 或者,也许问题是 cURL 过载 ?

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

提前感谢您的想法。

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

首先,您应该了解到底发生了什么,请查看此简化方案:

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

因此,在每一点上,您都可能遇到瓶颈:

  1. 网络带宽
  2. 打开的最大连接数
  3. 线程池大小
  4. 脚本执行时间
  5. 最大数据库连接数、表锁数、io 等待时间数
  6. 客户端超时

而且它不是可能发生问题并最终导致空卷曲响应的可能位置的完整列表。

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