要件:
特定のシステムでは、製品のパッチファイルをアップロードしたり、製品のアップデート情報を公開したりした後、製品を使用するユーザー(多数のユーザー)にメールを送信する必要があります。送信後、送信完了のメッセージが表示されます。 !
一般的に使用される PHP コードの記述方法は次のとおりです:
リーリー今回は100通のメールが送信されたとします。この作戦の結果はどうなるでしょうか?
ユーザー エクスペリエンス: ユーザーは待機します -> メールの送信が完了します -> 情報を返します (この間にスクリプトの実行がタイムアウトになる可能性が非常に高くなります)
この操作では大量のメールを送信する必要があるため、PHP の実行時間が長すぎてユーザーは待ち遠しくなります。 Apache または nginx が許容実行時間を超えて待機すると、タイムアウト エラーが返されます。現時点では、ユーザーには操作が成功したかどうか、また送信されたメールの数はわかりません。
このことから、上記のコードのユーザー エクスペリエンスは非常に悪く、タスクを正常に完了できないことがわかります。
それでは、このユーザーエクスペリエンスの低下の問題をどのように解決すればよいでしょうか?
ここで非同期実行という概念について説明します
ユーザーエクスペリエンス: ユーザーは待つ -> 送信完了
友達は、なぜ送信リンクがないのかと尋ねるでしょう。
送信プロセスでは、ユーザーがリクエストを送信すると、送信タスクは送信を個別に処理する PHP プログラムに転送されます。ユーザーに「送信完了」と表示された時点では、レターはまだ送信されていません。 -送信プログラムはバックグラウンドで懸命に動作し、文字を 1 つずつ送信します。
<?php // ...... //查找出所有使用该产品的用户email地址,假设存放在$email数组中 for($i=0;$i<count($email);$i++){ sendemail(); } function sendemail(){ //发送邮件代码 } //......