ホームページ  >  記事  >  バックエンド開発  >  PHPの非同期実行方法、模擬マルチスレッドアプリケーション解析_PHPチュートリアル

PHPの非同期実行方法、模擬マルチスレッドアプリケーション解析_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:09:44793ブラウズ

PHP 自体にはマルチスレッドはありませんが、コマンド モードに限定される非同期呼び出しを実現するために複数のプロセスを使用するなど、湾曲した方法で同じ効果を生み出すことができます。
Web プログラムで使用できるもっと簡単な方法もあります。つまり、fsockopen()、fputs() を使用して、要求されたページ (URL) の戻りを待たずに URL を要求することと同等です。非同期。
キーコードは次のとおりです:

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

$fp = fsockopen('localhost',80,&$errno,&$ errstr、5); if(!$ fp),,,, pclose($ fp);
たとえば、非常に実用的なアプリケーションでは、新しいブログを公開するたびに、ブログのすべての購読者に電子メール通知を送信する必要があります。通常の方法で
を押すと、次のようになります:


ログが終了しました - > 送信ボタンをクリックします -> ログをデータベースに挿入します -> 公開が成功したことを著者に通知します

その後、著者は送信ボタンをクリックしてから成功プロンプトが表示されるのは、電子メール サービスへの接続が異常である、サーバーが遅い、購読者が多すぎるなど、電子メールの送信プロセスを待っていることです。実際、メールの送信が成功したかどうかに関係なく、ログが正常に保存されていれば基本的に問題ないため、メールの送信を待つプロセスは非常に不経済です。このプロセスは非同期で実行できます。電子メール送信の結果は重要ではないか、将来の参照のためにフォームを記録してください。

改善されたプロセスは次のとおりです:

ログが書き込まれた後 -> 送信ボタンをクリックします -> ログがデータベースに挿入されます -> 公開が成功したことを作成者に通知します
└ 電子メール通知を送信します -> ; [ログを書き出す]
実際にプログラムを書いてテストします。 write.php と sendmail.php の 2 つのファイルがあります。

write.php、実行には 1 秒かかります:

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

function asyn_sendmail()
80、&$errno、&$errstr、 5); if(!$fp) { fputs( $fp,"GET /sendmail.php?param=1/r/n"); #要求されたリソース URL は正しく記述されている必要があります ; call asyn_sendmail
'; asyn_sendmail();
echo time().'
';



sendmail.php、コードをコピーします

次のように:


sleep(10);
fopen("C:/" . time(), "w");
ページを通じて write.php にアクセスし、ページ出力:
1272472697
call asyn_sendmail
1272472698
を呼び出し、C:/ にファイルを生成します:
1272472708
上記の結果から、sendmail.php は次の処理を行うことがわかります。少なくとも 10 秒間は待機しますが、write.php の実行はブロックされず、プロセスが非同期であることを示します。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327227.html技術記事 PHP 自体にはマルチスレッドはありませんが、コマンド モードに限定される非同期呼び出しを実現するために複数のプロセスを使用するなど、湾曲した方法で同じ効果を生み出すことができます。 他にもあります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。