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

时间:2012-03-23 08:33:56

标签: php sql-server curl 3-tier

Hello stackoverflow people,

有点背景

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

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

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

[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调用来接收来自Web层的内容,例如推荐或消息。

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

问题

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

我现在已经搜索了几个月的解决方案,但在大约20种不同的解决方案之后,我的智慧结束了。我不知道为什么cUrl冻结整个IIS(整个localhost冻结),我不知道为什么它会一直复原,即使我将整个网站复制到另一个com(它变得更糟)。

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

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

感谢stackoverflow社区。

其他信息

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

更新

今天早上(2012年3月26日)我尝试减少cUrl通话次数,网站性能提升了很多。但冻结仍然发生:\

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我最近把网站放在我客户的网络服务器上,蚂蚁冻结似乎消失了。任何想法为什么呢?

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

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