目次
1. クライアント ページは、AJAX テクノロジーを使用してサーバー
2.popen() function
3.CURL 拡張機能
4.fskokopen() 関数
ホームページ バックエンド開発 PHPチュートリアル PHP で一般的な非同期呼び出しを実装する方法

PHP で一般的な非同期呼び出しを実装する方法

Jun 20, 2016 pm 01:03 PM
curl fsockopen http php quot

ブラウザとサーバー間の通信はコネクションレス型のHTTPプロトコルであり、クライアントがサーバーにリクエストを行い、サーバーはリクエストに応じて対応するプログラムを出力するという特徴があり、永続的な接続を維持することができません。これにより、クライアントの対応するサーバーが 1 秒または 1 分間実行される可能性があるため、プログラムの実行が遅い場合、ブラウザは常に待機状態になる可能性があります。

プログラムの実行結果を気にする必要がない場合もあります。このように時間を無駄にして辛抱強く待つ必要はありません。その場合は、プログラムをバックグラウンドでサイレントに実行する方法を見つける必要があります。待たずに。たとえば、推奨電子メールが 1,000 人のユーザーに送信されるシナリオがあります。ユーザーは電子メール アカウントを入力またはインポートし、送信のためにサーバーに送信します。

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

このコードはユーザー エクスペリエンスが非常に悪く、実際には使用できません。まず、大量のメールを送信するとサーバーが動作してしまいます。実際、時間が経つとユーザーはシステム製品に対する疑問を抱き、信頼を失うことになります。

しかし、ユーザーは、正常に送信する前に 1,000 件の電子メールがすべて送信されるまで待つ必要はありません。バックグラウンドに送信した後、ユーザーに送信が成功するよう直接プロンプトを表示し、バックグラウンド プログラムにサイレントに順番に送信させることができます。 。

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

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

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

3.プログラム

4. 特定のシナリオでのユーザー エクスペリエンスの向上

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

1. クライアント ページは、AJAX テクノロジーを使用してサーバー

最も簡単な方法は、AJAX 呼び出しを埋め込んで HTML コードでクライアントに返すことです。この方法が最も簡単で高速です。サーバーは呼び出しを行う必要はありません。ただし、一般に、Ajax は onLoad の後にトリガーされる必要があるという欠点があります。つまり、ユーザーがページをクリックして閉じた場合、バックグラウンド スクリプトはトリガーされません。

もう 1 つの方法は、img タグを使用し、src 属性を使用して実行するスクリプトを指定することです。この方法は、厳密な意味での非同期実行とは言えません。ユーザーのブラウザは、php スクリプトの実行が完了するまで長時間待機します。つまり、ユーザーのブラウザのステータス バーには常に読み込み状態が表示されます。もちろん、スクリプト タグなど、同様の原理を持つ他のメソッドも使用できます。

2.popen() function

resource Popen (string command, string mode);

//派生コマンドが生成するプロセスを指すパイプをオープンしますコマンドの実行によって。指定されたコマンドを生成したコマンドの実行によって生成されたプロセスへのパイプを開きます。したがって、呼び出して渡すことはできますが、その出力は無視します。 pclose(popen("/home/xinchen/backend.php &", 'r')); このメソッドは最初のメソッドの欠点を回避し、高速です。

しかし、問題は、このメソッドは HTTP プロトコルを通じて別の Web サービスをリクエストできず、ローカル スクリプト ファイルしか実行できないことです。

また、一方向にのみ開くことができ、呼び出されたスクリプトに多数のパラメータを渡すことはできません。また、アクセス数が多ければ、大量のプロセスが生成されます。外部リソースを使用する場合は、競合について自分で考慮する必要があります。

3.CURL 拡張機能

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

以下は簡単な使用例です:

<p><?php</p>$ch=curl_init();<br />$curl_opt=array(<br />	CURLOPT_URL,'http://www.scutephp.com/ajax.php',<br />	CURLOPT_RETURNTRANSFER,1,<br />	CURLOPT_TIMEOUT,1<br />);<br />curl_setopt_array($ch,$curl_opt);<br />curl_exec($ch);<br /><p>curl_close($ch);
ログイン後にコピー

CURL を使用するには、CUROPT_TIMEOUT を 1 に設定する必要があることに注意してください (最小値は 1、憂鬱です)。つまり、クライアントは少なくとも 1 秒待つ必要があります。

4.fskokopen() 関数

fsockopen は、ソケット プログラミングをサポートする非常に強力な関数です。 fsockopen を使用して、電子メール送信などのソケット プログラムを実装できます。ヘッダー部分を手動で切り離します。

公式手順ドキュメント: http://cn.php.net/fsockopen/

以下は fskokopen 関数の使用方法の例です:

<p><?php</p>$fp=fsockopen('www.scutephp.com',80,$errno,$errstr,30);<br />if(!$fp){<br />    echo "$errstr ($errno)<br />\n";<br />}else{<br />    $out="GET /backend.php  / HTTP/1.1\r\n";<br />    $out.="Host: www.scutephp.com\r\n";<br />    $out.="Connection: Close\r\n\r\n";<br />    fwrite($fp,$out);<br />    /*忽略执行结果<br />    while(!feof($fp)){<br />        echo fgets($fp,128);<br />    }*/<br />    fclose($fp);<br />}
ログイン後にコピー


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

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 は、

See all articles