我有以下场景。如果任何投诉没有在48小时内完成,如果投诉已经接近48小时而没有完成,那么应该在时间限制之前(比如1小时前)在后台弹出或通知。我正在考虑做cron工作(每小时跑一次)。我的问题是如何在cron工作中做通知。欢迎提出任何建议
cron作业不应该连接到页面;它应该是相反的:使用后端页面本身来检查作业完成情况。您可以为此使用服务器发送事件(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秒后,脚本将停止运行。如果用户仍然打开管理页面,浏览器将自动重新连接。如果用户关闭了页面,资源将被释放。
来自Mozilla的更多文档:(感谢Alok Patel提供的链接)