2

私のスクリプトは新しいコメントの通知メールを送信します。これは50人のメンバーに送信される可能性があり、50通のメールを送信する必要があります。これには20秒かかる可能性があり、ユーザーが待つのに非常に長い時間がかかります。これを行うためのPHPの最良の方法は何ですか、非同期で行う方法はありますか?

4

5 に答える 5

3

簡単な方法は、必要な情報(電子メールアドレス、コンテンツ)をデータベースに保存し、cronジョブを使用してバッチプロセスを1分ごとに実行することです。バッチプロセスでは、保留中の電子メールをデータベースに照会し、送信する場合はそれらを調べて、データベースエントリを削除できます。

于 2012-12-30T18:48:34.410 に答える
2

非同期で行う方法はありますか?

はいあります!

exec('wget PATH_TO_YOUR_SCRIPT_THAT_SENDS_THE_NEWSLETTER > /dev/null &');

データベースの代替案もかなり良いものであることに注意してください。ただし、Linuxを使用している場合(およびデータベースを必要としない場合)、これも機能するはずです。

于 2012-12-30T18:48:20.727 に答える
2

RabbitMQのようなものを使用します。あなたのウェブサイトは、Rabbitにメールリクエストを送信するプロデューサーのように機能します。次に、Rabbitからのリクエストを処理するコンシューマーを実行します。

利点-消費者が倒れた場合、再起動すると、中断したところから再開します(最後に確認された要求)。

于 2012-12-30T19:03:01.047 に答える
1

実際、非同期で実行できます。

最も簡単な方法は、実際に電子メールを実行するのではなく、電子メールデータをデータベースに挿入してから、定期的に実際に電子メールを送信するcronジョブを作成することです。

もちろん他の方法もありますが、それはおそらく最も簡単な方法です。

于 2012-12-30T18:48:37.923 に答える
0

cURL POSTを使用して、非同期スクリプトを開始できます。タイムアウトを短期間に設定して、POSTリクエストが行われた後にスクリプトを再開できるようにします。POSTリクエストでメール情報を設定するか、データベーステーブルに保存することができます。

于 2012-12-30T18:55:56.190 に答える