私のスクリプトは新しいコメントの通知メールを送信します。これは50人のメンバーに送信される可能性があり、50通のメールを送信する必要があります。これには20秒かかる可能性があり、ユーザーが待つのに非常に長い時間がかかります。これを行うためのPHPの最良の方法は何ですか、非同期で行う方法はありますか?
5 に答える
簡単な方法は、必要な情報(電子メールアドレス、コンテンツ)をデータベースに保存し、cronジョブを使用してバッチプロセスを1分ごとに実行することです。バッチプロセスでは、保留中の電子メールをデータベースに照会し、送信する場合はそれらを調べて、データベースエントリを削除できます。
非同期で行う方法はありますか?
はいあります!
exec('wget PATH_TO_YOUR_SCRIPT_THAT_SENDS_THE_NEWSLETTER > /dev/null &');
データベースの代替案もかなり良いものであることに注意してください。ただし、Linuxを使用している場合(およびデータベースを必要としない場合)、これも機能するはずです。
RabbitMQのようなものを使用します。あなたのウェブサイトは、Rabbitにメールリクエストを送信するプロデューサーのように機能します。次に、Rabbitからのリクエストを処理するコンシューマーを実行します。
利点-消費者が倒れた場合、再起動すると、中断したところから再開します(最後に確認された要求)。
実際、非同期で実行できます。
最も簡単な方法は、実際に電子メールを実行するのではなく、電子メールデータをデータベースに挿入してから、定期的に実際に電子メールを送信するcronジョブを作成することです。
もちろん他の方法もありますが、それはおそらく最も簡単な方法です。
cURL POSTを使用して、非同期スクリプトを開始できます。タイムアウトを短期間に設定して、POSTリクエストが行われた後にスクリプトを再開できるようにします。POSTリクエストでメール情報を設定するか、データベーステーブルに保存することができます。