你好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 调用的数量,网站性能提高了很多。但是冻结仍然发生:\