ホームページ  >  記事  >  バックエンド開発  >  php で非同期データ呼び出しを実装する方法、_PHP チュートリアル

php で非同期データ呼び出しを実装する方法、_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:02:46681ブラウズ

phpメソッドで非同期データ呼び出しを実装します。

ブラウザとサーバー間の通信にはコネクションレス型のHTTPプロトコルのみが存在します。コネクションレス型プログラムの特徴は、クライアントがサーバーにリクエストを行い、サーバーがそれに応答することです。要求は対応するプログラムに戻り、永続的な接続を維持できません。これにより、クライアントの対応するサーバーが 1 秒または 1 分間実行される可能性があるため、プログラムの実行が遅い場合、ブラウザは常に待機状態になる可能性があります。
場合によっては、プログラムの実行結果を気にする必要がなく、時間を無駄にして辛抱強く待つ必要もありません。その場合は、プログラムを待たずにバックグラウンドで静かに実行する方法を見つける必要があります。たとえば、推奨電子メールが 1,000 人のユーザーに送信されるシナリオがあります。ユーザーは電子メール アカウントを入力またはインポートし、送信のためにサーバーに送信します。

リーリー

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

  • 単一タスクへのアプリケーションの依存を取り除く
  • プログラムの実行効率を向上させます
  • プログラムの拡張性の向上
  • 特定のシナリオにおけるユーザーエクスペリエンスが向上しました
  • PHP はマルチスレッドをサポートしていないため、非同期呼び出しを使用して複数の HTTP をリクエストすると、プログラムの並列実行の効果が得られます。ただし、リクエストされる HTTP リクエストが多すぎると、システムのオーバーヘッドが大幅に増加することに注意してください。

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

2.popen()関数
リソース Popen (文字列コマンド、文字列モード);
指定されたコマンドを生成したコマンドの実行によって生成されたプロセスへのパイプを開きます。指定されたコマンドを生成したコマンドの実行によって生成されたプロセスへのパイプを開きます。 したがって、呼び出して渡すことはできますが、その出力は無視します。
pclose(popen("/home/xinchen/backend.php &", 'r'));
この方法は、最初の方法の欠点を回避し、高速です。ただし、問題は、このメソッドは HTTP プロトコルを通じて別の Web サービスをリクエストできず、ローカル スクリプト ファイルしか実行できないことです。また、一方向にのみ開くことができ、呼び出されたスクリプトに多数のパラメータを渡すことはできません。また、アクセス数が多ければ、大量のプロセスが生成されます。外部リソースを使用する場合は、競合について自分で考慮する必要があります。

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

リーリー

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


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

上記は、PHP の非同期実行の 4 つの一般的な方法です。学習に役立つことを願っています。

興味があるかもしれない記事:

    非同期呼び出しメソッドの PHP 実装の研究と共有
  • PHP 非同期呼び出しソケット実装コード
  • PHP が非同期呼び出しを使用してデータを取得するときに発生する問題の解決策 (エラー c00ce56e が原因でこれが発生します)操作を完了できない)
  • PHPの非同期呼び出しメソッドの実装例

www.bkjia.com本当http://www.bkjia.com/PHPjc/1084548.html技術記事 PHP は非同期データ呼び出しを実装します。ブラウザとサーバー間の通信にはコネクションレス型 HTTP プロトコルのみが必要です。コネクションレス型プログラムの特徴は、クライアントがサービスを要求することです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。