4

你好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));

有点抄袭这个问题。

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

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

问题

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

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

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

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

感谢stackoverflow社区。

附加信息

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

更新

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

4

2 回答 2

0

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

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

无论哪种方式,问题都解决了......没有答案:(

于 2012-04-09T05:03:48.353 回答
0

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

于 2012-03-30T20:21:03.323 回答