PHP 自体にはマルチスレッドがありませんが、コマンドに限定される非同期呼び出しを実現するために複数のプロセスを使用するなど、曲線的な方法で同じ効果を生み出すことができます。モード。
Web プログラムで使用できるもっと簡単な方法もあります。つまり、fsockopen()、fputs() を使用して、要求されたページ (URL) の戻りを待たずに URL を要求することと同等です。非同期。
キーコードは次のとおりです:
リーリー上記のコードは、リクエストを another_page.php ページに送信し、それを無視します。リクエストされたページの応答データを待つ必要はありません。これを使用して、リクエストされたページ another_page.php で何かを行うことができます。
たとえば、非常に実用的なアプリケーションでは、新しいブログを公開するたびに、次の通常の方法に従って、ブログの購読者全員に電子メール通知を送信する必要があります。
ログを書き込んだ後 -> 送信ボタンをクリック -> ログをデータベースに挿入 -> 公開の成功をメールで送信その後、送信ボタンをクリックしてから成功のプロンプトが表示されるまでに、電子メール サービスへの接続が異常である、サーバーが遅いなどの理由で、作成者は長い時間がかかることがあります。または購読者が多すぎます。実際、メールの送信が成功したかどうかに関係なく、ログが正常に保存されていれば基本的に問題ないため、メールの送信を待つプロセスは非常に不経済です。このプロセスは非同期で実行できます。電子メール送信の結果は重要ではありません。または、フォームは将来の参照のために記録されます。
改善されたプロセスは次のとおりです:
ログを書き込んだ後 -> 送信ボタンをクリック -> 公開が成功したことを作者に通知 ->
実際のプログラムを書いてテストします。write.php と sendmail.php の 2 つのファイルがあります。sendmail.php で sleep(秒) を使用して、プログラムの実行にかかる時間をシミュレートします。
write.php、実行には 1 秒かかります:
リーリーsendmail.php、実行には 10 秒かかります:
リーリーページ、ページ出力を通じて write.php にアクセスします:
1272472697
asyn_sendmailを呼び出す
1272472698
C:/: にファイルを生成します
1272472708
上記の結果から、sendmail.php には少なくとも 10 秒かかりますが、write.php の実行はブロックされず、このプロセスが非同期であることがわかります。
興味がありそうな記事
PHP の非同期デバッグと Web サイトプログラムのオンラインデバッグの方法http://www.bkjia.com/PHPjc/892342.html