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 またはポート システムに過負荷をかけていることが原因である可能性があり、一部のリクエストが正常に送信されなかったか、サーバーが 1 秒間に 150 リクエストを処理するほど高速ではありません。

すべてのリクエストが送信されたことを安全に知るための解決策はありますか? 私のクライアントがスクリプトを使用する場合、要求の少なくとも 99.5% が実際に送信されることが不可欠であり、彼のサーバーはそれを問題なく処理するのに十分強力です。セキュリティ上の理由から彼のサーバーでテストすることはできませんが、私のサーバーは動作条件をシミュレートするのに十分強力ではありません.

4

2 に答える 2

0

リクエストに関する複雑な情報が必要な場合は、データベースが間違いなくここでの最良のオプションです。

カウントだけが気になる場合は、Memcacheアトミック追加操作(http://php.net/manual/en/memcache.add)を使用して、Membase(http://www.membase.org/downloads)カウンターをお勧めします。 .php)

于 2011-01-13T09:38:47.687 に答える
0

理想的には、これらの値を memcached インスタンスなどのキー キャッシュに書き込み、最終的にシングルスレッド スクリプトを使用してデータベース/フラット ファイルに書き込みます。これにより、リクエストに対応する速度が向上し、データをディスクに保存することもできます。

そうは言っても、簡単な回避策としてデータベースを使用するだけでうまくいきます。

于 2010-12-06T02:33:00.323 に答える