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


my 3 tiers website keeps freezing using cUrl

大家好,

一点背景

我的PHP是使用IIS安装在Windows7上的,我实现了web.config,SQL Server(mssql)版本是12.0

我构建的网站是理论上的三层架构,这意味着我使用了两个com进行测试,其中一个com包含mssql和web层,另一个包含应用层。

所以当用户连接时,它会像一样连接

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

im使用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调用。

问题

问题是网站在三到四页后一直冻结(这是随机的,但通常在这个范围内),或者页面没有加载所有内容(据我所知,这是由于curlopt_timeout选项?需要解释),我不得不重新启动IIS服务器。我发现是cUrl函数一直在冻结com.

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

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

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

感谢stackoverflow社区。

附加信息

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

更新

今天早上(2012年3月26日),我尝试减少cUrl调用的次数,网站性能大大提高。但是冻结仍然发生:''

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

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

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

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