可以使用cron job在php web中显示通知

时间:2016-08-09 12:24:29

标签: php notifications cron

我有以下情况。 如果任何投诉工作未能在48小时内完成,并且如果该投诉接近48小时未完成,则应在时间限制之前(例如1小时前)在后端进行弹出或通知。 我正在考虑做cron工作(每小时运行一次)。我的问题是如何在cron作业中进行通知。 欢迎提出任何建议。

1 个答案:

答案 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的链接)