我的 3 层网站使用 cUrl 一直冻结

Posted

技术标签:

【中文标题】我的 3 层网站使用 cUrl 一直冻结【英文标题】:my 3 tiers website keeps freezing using cUrl 【发布时间】:2012-04-07 19:52:55 【问题描述】:

大家好,***,

一点背景

我的 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 coms 上测试这个东西时(见上文),网站加载速度非常慢。显然也是因为 cUrl。

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

感谢 *** 社区。​​p>

其他信息

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

更新

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

【问题讨论】:

Windows 日志中有消息吗? 如果你的意思是httperr.log,不,只是一堆Timer_ConnectionIdle 不,我的意思是“我的电脑”下的系统日志 -> 右键单击​​ -> 管理和系统日志。如果服务器挂起,则 httperr.log 中没有消息 windows.microsoft.com/en-US/windows-vista/Open-Event-Viewer 有系统protokolls。你应该看看,如果你能找到看起来像你的问题的东西。 我试着看一看,但我不知道我在找什么。没有任何严重错误,编译的错误主要是启动或SSL证书错误,我不使用ssl 【参考方案1】:

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

【讨论】:

我之前将 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 分别设置为 10,但它仍然会发生【参考方案2】:

我最近将该网站放在了我客户的网络服务器上,但冻结似乎消失了。知道为什么吗?

既然这改变了事情,我应该把这个问题改成 localhost cUrl 问题吗?我仍然不知道为什么 cUrl 冻结了我的 localhost,或者当我将它放在实际的 3 层环境中时它为什么消失了。

不管怎样,问题解决了……没有答案:(

【讨论】:

以上是关于我的 3 层网站使用 cUrl 一直冻结的主要内容,如果未能解决你的问题,请参考以下文章

php curl 使用 cloudflare 2021 访问网站

PHP函数在运行时冻结整个网站

使用 dig 和 curl 确定网站的物理主机

phpstudy nginx下curl请求本地其他项目

如何绕过使用 php cURL 库编写网站的 Oracle ADF 环回脚本?

更正 cURL 的代码