PHP非同期データ実行方法

墨辰丷
リリース: 2023-03-29 20:30:02
オリジナル
2799 人が閲覧しました

この記事では主にPHPでの非同期データ実行の方法を紹介しますので、興味のある方は参考にしていただければ幸いです。

コードは次のとおりです:

<?php 
$count = count($emailarr);
for($i =0; $i < $count; $i++) 
{ 
  sendmail();//发送邮件 
} 
?>
ログイン後にコピー

このコードはユーザーエクスペリエンスが非常に悪いため、実際には使用できません。まず、非常に多くのメールを送信すると、ユーザーの待ち時間が長くなります。ユーザーにシステム製品に対する疑問を抱かせ、信頼を失うことになります。ただし、メッセージを正常に送信する前に、ユーザーは 1,000 件の電子メールがすべて送信されるまで待つ必要はありません。メッセージをバックグラウンドに送信した後、ユーザーにメッセージを送信するよう直接指示し、バックグラウンド プログラムにメッセージを通知せずに送信させることができます。 1つ。
現時点では、コードを実行するために「非同期実行」テクノロジーが必要です。非同期実行の特徴は、ユーザーがコードの実行結果を待つ必要がないことです。

  • 単一タスクへのアプリケーションの依存関係を取り除く

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

  • プログラムのスケーラビリティを向上させる

  • は、特定のシナリオでのユーザー エクスペリエンスを向上させます

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

PHP の非同期実行の一般的な方法

1 クライアント ページは、AJAX テクノロジーを使用してサーバーをリクエストします方法は、クライアントに返される HTML コードに AJAX 呼び出しを埋め込むか、img タグを埋め込むことです。src は、実行される時間のかかるスクリプトを指します。この方法は最も簡単で最速です。サーバーは呼び出しを行う必要はありません。 ただし、欠点は、一般に、Ajax は onLoad の後にトリガーされる必要があることです。つまり、ユーザーがページをクリックして閉じた場合、バックグラウンド スクリプトはトリガーされません。 imgタグを使用した場合、このメソッドは厳密な意味での非同期実行とは言えません。ユーザーのブラウザは、php スクリプトの実行が完了するまで長時間待機します。つまり、ユーザーのブラウザのステータス バーには、常にロード中であることが表示されます。もちろん、スクリプト タグなど、同様の原理を持つ他のメソッドも使用できます。
2. Popen() 関数
resource Popen (string command, string mode);
指定されたコマンドの実行によって生成されたプロセスを指すパイプを開きます。指定されたコマンドの実行をフォークすることによって生成されたプロセスへのパイプを開きます。 したがって、呼び出して渡すことはできますが、その出力は無視します。 pclose(popen("/home/xinchen/backend.php &", 'r'));この方法は、最初の方法の欠点を回避し、また高速です。ただし、問題は、このメソッドは HTTP プロトコルを通じて別の Web サービスをリクエストできず、ローカル スクリプト ファイルしか実行できないことです。また、一方向にのみ開くことができ、呼び出されたスクリプトに多数のパラメータを渡すことはできません。また、アクセス数が多ければ、大量のプロセスが生成されます。外部リソースを使用する場合は、競合について自分で考慮する必要があります。

3. CURL 拡張機能
CURL は、POST/GET などの HTTP リクエストをシミュレートし、データを取得して抽出し、「標準出力」(stdout) に表示できる強力な HTTP コマンド ライン ツールです。

$ch = curl_init();
$curl_opt = array(CURLOPT_URL, &#39;http://www.example.com/backend.php&#39;,
       CURLOPT_RETURNTRANSFER, 1,
       CURLOPT_TIMEOUT, 1,);
 
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);
curl_close($ch);
ログイン後にコピー
CURL を使用するには、CUROPT_TIMEOUT を 1 に設定する必要があります (最小値は 1 です)。つまり、クライアントは少なくとも 1 秒待つ必要があります。

4. fskokopen() 関数

fsockopen は、ソケット プログラミングをサポートする非常に強力な関数です。fsockopen を使用すると、メール送信などのソケット プログラムを実装できます。fcockopen を使用するには、ヘッダー部分を手動で分割する必要があります。

$fp = fsockopen(www.jb51.net, 80, $errno, $errstr, 30);
if (!$fp) {
 echo "$errstr ($errno)<br />\n";
} else {
 $out = "GET /backend.php / HTTP/1.1\r\n";
 $out .= "Host: www.jb51.net\r\n";
 $out .= "Connection: Close\r\n\r\n";
 
 fwrite($fp, $out);
 /*忽略执行结果
 while (!feof($fp)) {
  echo fgets($fp, 128);
 }*/
 fclose($fp);
}
ログイン後にコピー
要約: 以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。 関連する推奨事項:

PHPフラッシュ関数の使用上の注意

PHP WeChatでカスタムメニューを開発する方法を共有

PHP WeChat開発アクセス例の詳細な説明

以上がPHP非同期データ実行方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート