我正在研究用SPA和Laravel4编写的完整AJAX邮件应用程序(AngularJS),用户可以在其中创建消息并将其发送到定义的联系人组。
问题是负责发送邮件的任务可能需要很长时间,所以我必须在后台运行它。
我想提供的主要功能是“开始”和“停止”整个邮件任务的能力,在这一刻我被卡住了......
我在考虑两种方法:
发送过程可能如下:
这种方法可以让我更多地控制“开始”和“停止”整个发送过程以及一些统计数据,例如为用户更新整个发送的进度条。
但主要的限制是发送了很长时间...假设超过一个小时或者那样......?用户不应该被迫仍然打开浏览器,否则邮件将被停止...... :(或者页面刷新...:/(我知道我可以在javascript中使用onunload事件,但它不优雅溶液)
这次可能看起来像这样:
应用程序使用以下命令发出ajax请求:
exec('php'.base_path()。'/ artisan mailing:send 1> / dev / null 2> / dev / null&');
应用程序返回200响应代码,用于通知shell任务已成功运行
在这种方法中,我不知道如何停止以前启动的任务shell ...有什么方法可以从以前的操作中获取runnable进程的“pid”吗?而且我不想“杀死”因为它可能会破坏发送数据......
有了这个,我担心重复的任务,当运行cronjobs的时间间隔将缩短...而当iterval将长期时,未使用的资源......
答案 0 :(得分:0)
对我来说,如果您可以访问服务器中的shell,最好的方法是使用后台长期运行的任务(如守护进程)。您可以使用某种命令队列与任务进行通信,例如通过数据库中的内存表。
如果你已经用PHP编写了所有内容(或者想使用单一语言),你可以使用php-cli。