ホームページ バックエンド開発 PHPチュートリアル PHP_PHP チュートリアルでのマルチスレッド プログラム コードの非同期呼び出しの実装

PHP_PHP チュートリアルでのマルチスレッド プログラム コードの非同期呼び出しの実装

Jul 20, 2016 am 11:11 AM
php コード について 成し遂げる 非同期 記事 プログラム 移行

この記事では、PHP での非同期呼び出しマルチスレッド メソッドの実装について詳しく紹介します。次に、1,000 人のユーザーに推奨メールを送信します。ユーザーは、メール アカウントを入力またはインポートし、実行のためにサーバーに送信します。

たとえば、推奨メールを 1,000 人のユーザーに送信するシナリオがあります。ユーザーはメール アカウントを入力またはインポートし、送信のためにサーバーに送信します。

コードは次のとおりです コードをコピー

$sqlserver/42852.htm target=_blank >count=count($emailarr);

for($i=0) ;$i< ;$count;$i )

{

sendmail(....);//メールを送信

}

?>

このコードはユーザーエクスペリエンスが非常に悪いので、実際に使用すると、まず、あまりにも多くの電子メールを送信すると、サーバーがタイムアウトしてしまいます。実際、ユーザーの待ち時間が長いため、ユーザーはシステム製品に対する疑問を抱き、信頼を失うことになります。ただし、ユーザーは、電子メールを正常に送信する前に 1,000 件の電子メールがすべて送信されるまで待つ必要はありません。バックグラウンドに送信した後、ユーザーに送信が成功するよう直接プロンプトを表示し、バックグラウンド プログラムに電子メールを 1 つずつサイレントに送信させることができます。 。

このとき、コードを実行するには「非同期実行」技術が必要です。非同期実行の特徴は、ユーザーがコードの実行結果を待つ必要がないことです。 :

1. 単一タスクの依存関係を取り除く

2. プログラムの実行効率を向上させる

4. 特定のシナリオにおけるユーザーエクスペリエンスを向上させる

5. PHP はマルチスレッドをサポートしていないため、非同期呼び出しリクエストを使用します。複数の HTTP メソッドはプログラムの並列実行の効果を実現しますが、HTTP リクエストが多すぎるとシステムのオーバーヘッドが大幅に増加することに注意してください

ユーザー エクスペリエンス: ユーザーは待ちます -> 送信完了

友達は、なぜ送信リンクが見つからないのかと尋ねます。
送信プロセスでは、ユーザーがリクエストを送信すると、送信タスクは送信を個別に処理する PHP プログラムに転送されます。ユーザーに「送信完了」と表示された時点では、レターはまだ送信されていません。送信プログラムがバックグラウンドで懸命に動作し、文字を 1 つずつ送信しています

sendmail.php

コードは次のとおりです$domain="www. ***.com";

$url="/system_mail.php";
$par="email=".implode(',',$emailarr)."&...";
$header = "POST $url HTTP/1.0rn";
$header .= "Content-Type: application/x-www-form-urlencodedrn";
$header .= "Content-Length: " . strlen($par ) . "rnrn" ;
$fp = @fsockopen ($domain, 80, $errno, $errstr, 30);
fputs ($fp, $header . $par);
fclose($fp);

echo ''送信完了' ;

?>

system_mail.php
ini_set("ignore_user_abort",true);
ignore_user_abort(true);//ここのコードでは、関連するオプションを有効にするために php.ini が必要です。 php の実行がタイムアウトしないようにするには、私の他の記事「ブラウザを閉じた後も php スクリプトは実行され続けますか?」を参照してください。
//メールを送信するためのコードは次のとおりです。
?> ;

非同期モードに変更した後、ユーザーは情報を送信して、すぐに「送信完了」の結果を得ることができます。レターは送信されるまでバックグラウンドで 1 つずつ送信されます。


テスト後、いくつかの方法をまとめて共有します:
1. 最も簡単な方法は、クライアントに返される HTML コードに AJAX 呼び出しを埋め込むか、オブジェクトを指す src を含む img タグを埋め込むことです。時間のかかるスクリプトが実行されます。
この方法は最も簡単で早いです。サーバーは呼び出しを行う必要はありません。
しかし、欠点は、通常、Ajax は onLoad の後にトリガーされる必要があることです。つまり、ユーザーがページをクリックして閉じた場合、バックグラウンド スクリプトはトリガーされません。
imgタグを使用した場合、このメソッドは厳密な意味での非同期実行とは言えません。ユーザーのブラウザは、php スクリプトの実行が完了するまで長時間待機します。つまり、ユーザーのブラウザのステータス バーには、常にロード中であることが表示されます。
もちろん、スクリプトタグなど、同様の原理を持つ他のメソッドを使用することもできます。

2. Popen()

resource Popen (string command, string mode);
//指定されたコマンドコマンドの実行の結果として生じるプロセスを指すパイプを開きます。指定されたコマンドの実行をフォークすることによって生成されたプロセスへのパイプを開きます。

したがって、それを呼び出すだけで、その出力は無視できます。

コードをコピーします
コードは次のとおりです コードをコピーします
pclose(popen("/home/xinchen/backend.php &", 'r'));

このメソッドは、最初の方法、そして非常に迅速です。ただし、問題は、このメソッドは HTTP プロトコルを通じて別の Web サービスをリクエストできず、ローカル スクリプト ファイルしか実行できないことです。また、一方向にのみ開くことができ、呼び出されたスクリプトに多数のパラメータを渡すことはできません。
そして、アクセス数が多ければ、大量のプロセスが生成されます。外部リソースを使用する場合は、競合について自分で考慮する必要があります。

3. CURL
メソッドを使用し、CUROPT_TIMEOUT を 1 に設定します (最小値は 1 です)。つまり、クライアントは少なくとも 1 秒待つ必要があります。

コードは次のとおりです コードをコピー

$ch =curl_init();

$curl_opt = array(CURLOPT_URL, 'http://www.example.com/backend.php',

CURLOPT_RETURTRANSFER 、 1,

CURLOPT_TIMEOUT, 1,);

curl_close($ch);

4 の使用が最も完璧ですが、欠点は次のとおりです。 HTTP ヘッダー部分を自分で取り出します。

コードは次のとおりです

コードをコピーします


$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);

if (!$fp ) { $out = "GET /backend.php / HTTP/1.1rn";
echo "$errstr ($errno)
n";

} else {
$out .= "ホスト: www .example.comrn";

$out .= "接続: Closernrn";

fwrite($fp, $out);

/*実行結果を無視

while (!feof( $fp)) {

echo fgets($fp, 128);

}*/

fclose($fp);

}


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/444683.html技術記事この記事では、PHP での非同期呼び出しマルチスレッド メソッドの実装について詳しく紹介します。以下では、ユーザーがサービスを送信するために電子メール アカウントを入力またはインポートします。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles