我有以下情况。 如果任何投诉工作未能在48小时内完成,并且如果该投诉接近48小时未完成,则应在时间限制之前(例如1小时前)在后端进行弹出或通知。 我正在考虑做cron工作(每小时运行一次)。我的问题是如何在cron作业中进行通知。 欢迎提出任何建议。
答案 0 :(得分:2)
cron作业不应该连接到页面;它应该是相反的:使用后端页面本身来检查作业是否完成。您可以使用Server-Sent Events(SSE)。这个过程将是:
1 后端页面(Javascript)订阅SSE频道并在PHP脚本发出事件时显示弹出窗口
var source = new EventSource("job_checker.php");
source.onmessage = function(event) {
//event contains the job info and deadline. you can display it
var jobDetails = JSON.parse(event);
...
};
2 PHP job_checker.php 可以循环运行一段时间,检查作业是否完成:
<?php
$time_limit = 300; //300 seconds
$time_spent = 0;
while($time_spent < $time_limit){
sleep(30); //sleep for 30 seconds
$time_spent += 30;
//check DB for job completion and deadline.
//if you find a job, emit an SSE to the browser
if($event_found){
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
echo "data: ". json_encode($event_found)."\n\n";
flush();
}
}
PHP脚本将继续工作300秒。如果它找到一个事件,它将发出数据,浏览器将获取它。 300秒后,脚本将死亡。如果用户仍然打开管理页面,浏览器将自动重新连接。如果用户已关闭页面,则将释放资源。
更多docs from Mozilla :(感谢Alok Patel的链接)