我有一个PHP脚本来处理我的电子邮件订阅。
它的确如下:
foreach email to be sent:
mailer->send-email
print "Email sent to whoever."
我现在正在通过我的网络托管服务商遇到速率限制。邮件库有一个内置的节流器,可以睡觉,以确保我保持低于速率。但是,这可能导致网页需要多个小时才能实际加载。
客户端浏览器是否会放弃页面加载?有没有建议更好的解决方案呢?
答案 0 :(得分:4)
为什么要在网页上加载?这应该是一个计划运行的离线后端进程。 (查看cron
以了解计划任务。)
任何长时间运行的进程都应委托给后端服务来处理该进程。应用程序界面(例如网页)应尽快响应用户,而不是强迫用户等待(小时?)以获得响应。
应用程序可以通过后端进程的某些共享数据源(例如,简单的数据库)跟踪进度,并将该进度呈现给用户。没关系。但是这个过程本身应该在应用程序之外发生。
例如,处于较高水平......
答案 1 :(得分:1)
您可能不在乎,但即使您强迫此脚本保持活着,也不应故意通过Web服务器运行长时间运行的脚本。 Web服务器使用资源繁重的线程或进程来运行您的脚本,并且它们可用于服务器Web请求的数量有限。长时间运行的脚本基本上将其中一个脚本从可用于服务器Web访问者的进程池中取出。
相反,使用直接执行php二进制文件的cron作业。具体来说,不要将wget
或lynx
或任何其他Web浏览器(如程序)用作cron作业的一部分,因为这些方法通过Web服务器运行脚本。 cron命令应该包含类似
php /full/path/to/the/script.php