1

PHPでサイト/サーバーの稼働時間を監視するシステムを構築しようとしています。システムは1分間に数千のドメイン/IPをチェックする必要があります。これが最良の方法のように思われるので、私はcURLを調べました。

編集:システムは、サーバーをプローブし、その応答時間が妥当であることを確認し、その応答コードを返す必要があります。次に、応答時間とステータスコードを含む行をmysqlデータベースに追加します。システムの通知部分は、そこからかなり簡単です。システムは専用サーバー上にあります。これがいくつかの明確さを追加することを願っています。

4

4 に答える 4

2

私が正しく理解していれば、あなたのこのシステムは常に何千ものドメイン/ IPに接続していて、それが機能する場合は、サーバーが稼働していると想定していますか?

cURLを使用できると思いますが、特に何千ものリクエストを話している場合は、長い時間がかかります。これが正しく機能するには、複数のサーバーと多くの帯域幅が必要になります。

マルチスレッドリクエストのマルチcURLを確認することもできます(つまり、一度に1つずつではなく、10以上のcURLリクエストを同時に送信します)。

http://php.net/manual/en/function.curl-multi-exec.php

于 2010-07-03T20:08:14.157 に答える
2

そのようなことのための非常に良いツールがあります。自分で書く必要はありません。

たとえば、 Nagiosを見てください。多くの管理者が監視に使用しています。

于 2010-07-03T20:18:42.080 に答える
2

KISSアプローチを採用して、phpのget_headers()関数を使用してみませんか?

ステータスコードを取得したい場合は、phpマニュアルページへのコメントからのスニペットを次に示します。

function get_http_response_code($theURL) {
  $headers = get_headers($theURL);
  return substr($headers[0], 9, 3); 
}

この関数(PHPのコア機能)は、curlよりも高速で効率的です。

于 2010-07-03T20:45:29.620 に答える
1

ボトルネックは、特定のホストが応答するのを待つことです。30秒のタイムアウトとチェックするN個のホストがあり、最後のホストを除くすべてが応答しない場合、最後のホストをチェックするには30(N-1)秒待つ必要があります。最後のホストをチェックすることは決してできないかもしれません。

確かに、複数のHTTPリクエストを送信する必要があります-すでに提案されているマルチcURL、またはOOアプローチのHttpRequestPoolクラスのいずれかです。

また、応答しないホストのキューを最初に処理する必要があるためにホストに到達できないという問題を回避するために、N個のホストのセットを分割して最大数のサブセットにチェックダウンする方法を検討する必要があります。

1台のサーバーからN個のホストをチェックすると、応答しないホストのキューが原因で1つ以上のホストに到達しない可能性が最も高くなります。これは、最も安価で、最も簡単で、最も信頼性の低いオプションです。

N台のサーバーからそれぞれ1台のホストをチェックすると、応答しないホストのキューが原因で、1台以上のホストに到達しない可能性が最も低くなります。これは最も高価で、(おそらく)最も困難で最も信頼できるオプションです。

自分に最適なコスト/難易度/信頼性のバランスを検討してください。

于 2010-07-03T20:31:30.257 に答える