我有一个php函数,可以向所有关注该帖子的用户发送某个帖子。
因为有时可能会有多达10万用户关注该帖子。这意味着这个功能需要重复10万次,因此需要永久性。
我想知道是否有办法在后台运行迭代,但与此同时,发布答案的用户不必等待所有时间。
我正在考虑告诉用户该电子邮件已发送给所有用户,而不是等到所有帖子都被发送,只是在php的后台运行shell中的另一个脚本。
谢谢
答案 0 :(得分:1)
将后台任务移至cronjob。
可能是这样的:
<强>更新强>
实际上,还有另一个技巧:
users_tobenotified
表格中收到通知的用户列表。你有PHP脚本作为cron,它将在该表上读取并在名为/data/cron/tobenotified
的某个目录中生成文本文件。此文件包含以下内容:
[date]\t[time]\t[post-entry]\t[user-tobenotified]\t[someotherinfo]
/data/cron/tobenotified
并读取每个文件然后进行处理。答案 1 :(得分:1)
将这样的异步活动添加到PHP脚本并不简单,但可以像您正在寻找的那样增加巨大的性能提升。
将待完成的电子邮件或其中的一些元数据存储在数据库中,并将其标记为已处理:false。然后,在服务器上运行的cron作业或其他一些守护程序/进程会定期检查该数据库表以查找要发送的电子邮件,或者您正在卸载的任何内容。这可能是最安全的,因为你记录了什么时候被请求,然后实际发送。
对于我必须完成的特别棘手的工作,我实际上发射了一个在后台运行的bash命令:
$job = "/bin/myscript $param1 $param2";
$job = "$job > /dev/null 2> /dev/null";
$cmd = "bash -c \"$job &\"";
exec($cmd)
请注意,在这种情况下,在调用exec()之后,您实际上无法控制事物。
<强>其他强>
以下示例类似于我的方法#2: http://robert.accettura.com/blog/2006/09/14/asynchronous-processing-with-php/
Gearman是另一种处理异步PHP任务的工具。他们甚至提到“Zend Framework现在正在使用它来执行提交后挂钩而不会让提交者经历延迟” http://css.dzone.com/articles/asynchronous-processing-php
答案 2 :(得分:-1)
您是否需要通过电子邮件单独通知每个用户?
为什么不在BCC字段上发送包含所有用户电子邮件地址的1封电子邮件?