0

我正在尝试测试创建 48 个 cURL 多句柄的 PHP 脚本,每个句柄包含大约 1500 个请求,全部并行执行。我试图确保所有请求都被实际发送,为此,我将请求记录在我的服务器上。这是我的 dump.php,我用我的脚本向它发出请求,它会将请求记录到一个文件中:

<?php
ob_start();
echo $_SERVER["REQUEST_URI"];
$dump = ob_get_clean();
$log = "dump.txt";
$fh = fopen($log, 'a') or die("can't open file");
fwrite($fh, $dump . "\r\n\r\n");
fclose($fh);

echo "Dump Completed";
?>

但是,我的四核 PC 能够以每 10 秒约 1500 次的速率触发这些请求存在一个小问题,并且很可能在尝试同时打开文件时使我的服务器超载。我在发送每个请求之间延迟了 0.1 秒,但我认为我的服务器仍然无法打开文件、转储文本并在下一个请求到达之前关闭它。结果,我的 PHP 文件说发送了大约 72k 的请求,但我的服务器说只收到了大约 14k。这可能是由于我的 PHP 程序使我的 PC 或端口系统过载,并且某些请求从未成功发送,或者我的服务器速度不够快,无法每秒处理 150 个请求。

尝试安全地知道我的所有请求都已发送的任何可能的解决方案?当我的客户使用该脚本时,必须至少实际发送 99.5% 的请求,并且他的服务器足够强大,可以毫无问题地处理这些请求。出于安全原因,我无法在他的服务器上对其进行测试,但我的功能不足以让我模拟工作条件。

4

2 回答 2

0

理想情况下,我会将这些值写入密钥缓存,例如 memcached 实例,然后最终写入带有单线程脚本的数据库/平面文件。这将使您能够跟上请求的速度,以及将数据存储到磁盘的能力。

话虽如此,仅使用数据库作为快速解决方法就可以了。

于 2010-12-06T02:33:00.323 回答
0

如果您需要有关请求的复杂信息,数据库绝对是最佳选择。

如果你只关心计数,我推荐一个 Membase (http://www.membase.org/downloads) 计数器,使用 Memcache 原子添加操作 (http://php.net/manual/en/memcache.add .php)

于 2011-01-13T09:38:47.687 回答