php - 我的 3 层网站使用 cUrl 一直卡住

标签 php sql-server curl 3-tier

你好 stackoverflow 的人们,

一点背景

我的 PHP 安装在使用 IIS 的 Windows 7 com 上,我实现了 web.config 并且 SQL Server (mssql) 版本是 12.0。

我建立的网站采用理论上的 3 层架构,这意味着我已经使用 2 个 com 进行了测试,其中一个 com 包含 mssql 和 web 层,另一个包含应用程序层。

所以当一个用户连接时,它是这样连接的

[user's com] --request page--> [web tier] --request info--> [app tier] --get info--> [mssql tier]

我正在使用 PHP 的 cUrl 函数将请求发送到应用层,看起来像这样:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'curl');
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: close'));
$result = trim(curl_exec($ch));

剽窃this question有一点。

有时我使用 $.ajax 调用来接收来自网络层的内容,例如推荐或消息。

一个典型的页面可能包含 10-20 个 cUrl 调用。

问题

问题是网站在 3 或 4 个页面后一直卡住(它是随机的,但通常在这个范围内)或者页面没有加载所有内容(据我了解这是由于 curlopt_timeout 选项?需要解释),并且我必须重新启动 IIS 服务器。我已经确定是 cUrl 函数一直卡住 com。

我已经搜索了几个月的解决方案,但在尝试了大约 20 种不同的解决方案之后,我已经束手无策了。我不知道为什么 cUrl 会卡住整个 IIS(整个 localhost 会卡住),我也不知道为什么即使我将整个站点复制到另一个 com(情况变得更糟)它仍然会返回。

当我在 2 个 com 上测试这个东西时(见上文),网站加载速度非常慢。显然也是因为 cUrl。

我希望有人能阐明正在发生的事情,并在可能的情况下提供解决方案。

感谢 stackoverflow 社区。

附加信息

如果有助于解决问题,所有 cUrl 请求都会转到应用层上的单个 php 文件 dbQuery.php,该文件读取输入并加载所需的 mssql 表页面,获取或发送任何信息,并返回mssql 结果为 xml。 (我认为这可能会导致瓶颈,因为最大的页面生成了 37 个 cUrl 调用)。

更新

今天早上 (26/3/2012) 我尝试减少 cUrl 调用的次数,网站性能提高了很多。但是卡住仍然发生:\

最佳答案

这可能是因为您尝试使用 curl 读取的 url 可能需要更多时间才能加载。因此,请尝试在您的浏览器中加载相同的 url 并检查它正在加载。

关于php - 我的 3 层网站使用 cUrl 一直卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9836072/

相关文章:

curl - 如何使用 curl 命令登录 HashiCorp Vault

perl - 对 URL 中的双引号进行转义以使用curl 命令执行

java - 通过 Java 的 Curl 命令在 Windows 中有效,但在 Linux 中无效

php - 显示可能通过 HTTP POST (PHP + MySQL) 更改的项目列表的最佳做法是什么

php - 调用 WAMP 成员函数 query()

使用 mysql_query 函数和安全性的 PHP 参数化查询?

c# - 导入 excel 文件并比较两个表的重复数字

php - 输入地址时 WordPress 出现 404 Not Found 错误

c# - 即使生成的 SQL 很快, Entity Framework 也会随着添加的额外连接而逐渐变慢

sql-server - 在 SQL Server 中按多列排序