2

我的脚本发送新评论的通知电子邮件,这可能是给 50 个成员,需要发送 50 封电子邮件,这可能需要 20 秒,这对于用户来说等待时间太长了!PHP中最好的方法是什么,有没有异步的方法?

4

5 回答 5

3

一种简单的方法可能是将必要的信息(电子邮件地址、内容)存储在数据库中,并通过 cron 作业每分钟左右运行一个批处理。批处理过程可以查询数据库中的待处理电子邮件,如果有任何要发送的电子邮件,请检查它们,然后删除数据库条目。

于 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 回答