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