PHP シングルスレッドによる Web ページの並列クロールの実装_PHP チュートリアル
Web ページの並列クロールの PHP シングルスレッド実装
この PHP チュートリアルでは、複数のページ情報を並列クロールするプロセスをシミュレートします。鍵はシングルスレッドの並列処理にあります。
通常の状況では、複数のページから情報を取得するプログラムを作成するときに誰もがシリアル ソリューションを使用しますが、取得サイクルが長すぎて実用的ではありません。そこで、curlを使って並列クロールすることを考えました。しかし、その仮想サーバーにはカールが存在しないことが最終的に判明し、非常に混乱しました。そこで、考え方を変えて、単一のスレッドを使用して複数のスレッドの効果を実現することにしました。ネットワークプログラミングについて知りたいです
IO 再利用の概念を知っている人は、もちろん PHP でもサポートされており、拡張機能は必要ありません。
プログラミング経験が長年ある人は、PHPのストリーム機能についてあまり知らないかもしれません。 PHP の圧縮ファイル ストリーム、ファイル ストリーム、および tcp プロトコルに基づくアプリケーションは、すべて 1 つのストリームにカプセル化されます。それで、ローカルファイルを読んでください
ネットワークファイルの読み取りと違いはありません。ここまで述べましたが、基本的には皆さんも理解していると思います。コードを貼り付けてみましょう。
コードは比較的大まかですが、実際に使用する場合は、まだいくつかの詳細に対処する必要があります。コード
関数 http_get_open($url)
{
$url = parse_url($url);
if (empty($url['host'])) {
false を返す;
}
$host = $url['host'];
if (empty($url['path'])) {
$url['path'] = "/";
}
$get = $url['path'] . "?"
$fp = stream_socket_client("tcp://{$host}:80", $errno, $errstr, 30);
if (!$fp) {
エコー「$errstr ($errno)」
ん」;
false を返す;
} 他 {
fwrite($fp, "GET {$get} HTTP/1.0rnHost: {$host}rnAccept: */*rnrn");
}
$fp を返す;
}
関数 http_multi_get($urls)
{
$result = array();
$fps = array();
foreach ($urls as $key => $url)
{
$fp = http_get_open($url);
if ($fp === false) {
$result[$key] = false;
} 他 {
$result[$key] = '';
$fps[$key] = $fp;
}
}
ながら(1)
{
$reads = $fps;
if (empty($reads)) {
休憩;
}
if (($num = stream_select($reads, $w = null, $e = null, 30)) === false ) {
エコー「エラー」;
false を返す;
} else if ($num > 0) {//can read
foreach ($は$valueとして読み取られます)
{
$key = array_search($value, $fps);
if (!feof($value)) {
$result[$key] .= fread($value, 128);
} 他 {
unset($fps[$key]);
}
}
} else {//タイムアウト
エコー「タイムアウト」;
false を返す;
}
}
foreach ($result as $key => &$value)
{
if ($value) {
$value =explode("rnrn", $value, 2);
}
}
$result を返す;
}
$urls = array();
$urls[] = "http://www.qq.com";
$urls[] = "http://www.sina.com.cn";
$urls[] = "http://www.sohu.com";
$urls[] = "http://www.blue1000.com";
//並行クロール
$t1 = microtime(true);
$result = http_multi_get($urls);
$t1 = microtime(true) - $t1;
var_dump("コスト: " . $t1);
//シリアルキャプチャ
$t1 = microtime(true);
foreach ($urlsを$valueとして)
{
file_get_contents($value);
}
$t1 = microtime(true) - $t1;
var_dump("コスト: " . $t1);
?>
最終的な実行結果:
文字列「コスト: 3.2403128147125」(長さ=21)
文字列「コスト: 6.2333900928497」(長さ=21)
基本的に効率が 2 倍になります。もちろん、Sina は非常に遅く、約 2.5 秒かかります。
基本的に私は彼に引きずり込まれました、360は0.2秒しかかかりませんすべてのWebサイトの速度が同等で、並列数が多ければ、その差の倍数は大きくなります。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
