ホームページ バックエンド開発 PHPチュートリアル PHP はソケット実装コードを非同期的に呼び出します_PHP チュートリアル

PHP はソケット実装コードを非同期的に呼び出します_PHP チュートリアル

Jul 21, 2016 pm 03:21 PM
php socket コード そして 成し遂げる 非同期 方法 サーバ ブラウザ 移行 のために

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

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

$count=count($emailarrar)
for($i=0;$i<$count;$i++)
{
sendmail( .....);// メールを送信
}
?>

まず、このコードはユーザー エクスペリエンスが非常に悪く、実際には使用できません。実際、サーバーを長時間稼働させると、ユーザーはシステム製品に対する疑問を抱き、信頼を失うことになります。ただし、ユーザーは、電子メールを正常に送信する前に 1,000 件の電子メールがすべて送信されるまで待つ必要はありません。バックグラウンドに送信した後、ユーザーに送信が成功するよう直接プロンプトを表示し、バックグラウンド プログラムに電子メールを 1 つずつサイレントに送信させることができます。 。
現時点では、コードを実行するために「非同期実行」テクノロジーが必要です。非同期実行の特徴は、ユーザーがコードの実行結果を待つ必要がないことです。
1. アプリケーションの単一タスクへの依存を取り除く
2. プログラムの実行効率を向上させる
4. 特定のシナリオでのユーザー エクスペリエンスを向上させる
5.マルチスレッドでは、非同期呼び出しを使用して複数の HTTP をリクエストします。これにより、プログラムの並列実行効果が向上しますが、HTTP リクエストが多すぎると、システムのオーバーヘッドが大幅に増加することに注意してください。 :

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

2.popen() 関数

resource Popen (string command, string mode); // を指すパイプを開きます。 process、指定されたコマンドの実行をフォークすることによって生成されるプロセス。指定されたコマンドを生成したコマンドの実行によって生成されたプロセスへのパイプを開きます。
したがって、それを呼び出すことができますが、その出力は無視できます。
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, 'http://www.example.com/backend.php',
CURLOPT_RETURNTRANSFER, 1,
CURLOPT_TIMEOUT, 1,);
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);


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

4.fskokopen() 関数

fsockopen は、ソケットプログラミングをサポートする非常に強力な関数です。fsockopen を使用して、メール送信などのソケットプログラムを実装できます。fcockopen を使用するには、ヘッダー部分を手動で切り離す必要があります。
公式ドキュメント: http://cn.php.net/fsockopen/

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

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)
n ";
} else {
$out = "GET /backend.php / HTTP/1.1rn";
$out .= "ホスト: www.example.comrn";
$out .= "接続: Closernrn";
fwrite($fp, $out);
/*実行結果を無視します
while (!feof($fp)) {
echo fgets($fp, 128)*/
fclose($fp);


PHP はソケットを非同期で呼び出します

コードをコピーします。 コードは次のとおりです。 $path = "/Report.php ?ReportID=1 ";
$cookie = Session_id();
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
print "$errstr ($errno) )
n";
exit;
}
$out = "GET ".$path." HTTP/1.1rn";
$out .= "ホスト: ".$host."rn";
$out . = "接続: Closern";
$out .= "Cookie: ".$cookie."rnrn"; // リクエストをソケットに書き込みます
サーバー側の応答を取得することも選択できます
/*while (!feof($fp)) {
echo fgets($fp, 128);
}*/
//サーバー側の応答を待たない場合、ソケットを直接閉じるだけです
fclose($fp)

;



http://www.bkjia.com/PHPjc/324937.html

www.bkjia.com
tru​​e

http://www.bkjia.com/PHPjc/324937.html技術記事 PHPの非同期呼び出しの実装方法 ブラウザとサーバー間の通信にはコネクションレス型のHTTPプロトコルしかありません。コネクションレス型プログラムの特徴は、クライアントがサーバーにリクエストを行い、サーバー...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? Apr 07, 2025 am 12:02 AM

PHPでは、予測不可能なトークンを使用して、CSRF攻撃を効果的に防ぐことができます。特定の方法には次のものが含まれます。1。フォームのCSRFトークンを生成および埋め込みます。 2.リクエストを処理するときにトークンの有効性を確認します。

PHPで厳密なタイプ(declare(strict_types = 1);)を説明します。 PHPで厳密なタイプ(declare(strict_types = 1);)を説明します。 Apr 07, 2025 am 12:05 AM

PHPの厳格なタイプは、declare(strict_types = 1)を追加することで有効になります。ファイルの上部に。 1)関数パラメーターのタイプチェックと戻り値を強制して、暗黙の型変換を防ぎます。 2)厳格なタイプを使用すると、コードの信頼性と予測可能性を改善し、バグを減らし、保守性と読みやすさを向上させることができます。

Webページにローカルにインストールされている「Jingnan Mai Round Body」を正しく表示するにはどうすればよいですか? Webページにローカルにインストールされている「Jingnan Mai Round Body」を正しく表示するにはどうすればよいですか? Apr 05, 2025 pm 10:33 PM

最近、Webページにローカルにインストールされたフォントファイルを使用して、インターネットから無料のフォントをダウンロードし、システムに正常にインストールしました。今...

どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) Apr 08, 2025 am 12:03 AM

PHPでは、最終的なキーワードを使用して、クラスが継承されないようにし、メソッドが上書きされます。 1)クラスを決勝としてマークする場合、クラスを継承することはできません。 2)メソッドを最終的にマークする場合、メソッドはサブクラスによって書き換えられません。最終的なキーワードを使用すると、コードの安定性とセキュリティが保証されます。

作曲家は何に使用されていますか? 作曲家は何に使用されていますか? Apr 06, 2025 am 12:02 AM

作曲家は、PHPの依存関係管理ツールです。 Composerを使用するコアステップは次のとおりです。1)「Stripe/Stripe-PHP」などのComposer.jsonの依存関係を宣言:「^7.0」; 2)ComposerInStallを実行して、依存関係をダウンロードおよび構成します。 3)Composer.LockおよびAutoload.phpを介してバージョンとオートロードを管理します。 Composerは依存関係管理を簡素化し、プロジェクトの効率と保守性を向上させます。

JavaScriptまたはCSSを介してブラウザ印刷設定でページの上部と終了を制御する方法は? JavaScriptまたはCSSを介してブラウザ印刷設定でページの上部と終了を制御する方法は? Apr 05, 2025 pm 10:39 PM

JavaScriptまたはCSSを使用して、ブラウザの印刷設定のページの上部と端を制御する方法。ブラウザの印刷設定には、ディスプレイが...

Webページにローカルにインストールされたフォントファイルを使用する方法は? Webページにローカルにインストールされたフォントファイルを使用する方法は? Apr 05, 2025 pm 10:57 PM

Webページにローカルにインストールされたフォントファイルを使用する方法Webページ開発でこの状況に遭遇しましたか:コンピューターにフォントをインストールしました...

See all articles