我想向服务器发送一个AJAX呼叫,该服务器向我们的客户打电话。但是,我不希望启动该过程的人必须打开浏览器。经过一些研究,我发现我可以通常在php中传递一个标题,以允许浏览器在没有php执行停止的情况下断开连接。这对AJAX也有用吗?相关代码如下。
//jQuery 1.8.10
$('#start').click(function(){
$.post('/startcalling', {
'time_limit': 0
});
});
$('#stop').click(function(){
$.post('/stopcalling');
});
重要的PHP
function startCalling(){
echo "starting...";
header('Connection: close');
while(getFlagStatus()){
makeNextCall();
}
}
function stopCalling(){
if(!getFlagStatus()){
$query = "UPDATE cc_flags SET cc_on = 0";
mysql_query($query);
}
}
我可以将它打包成CLI命令,并实现我的目标,但我觉得必须有一个更简单的方法。如果我一直困惑,请告诉我,我会编辑。
编辑:Does php execution stop after a user leaves the page? 这适用于此吗?
答案 0 :(得分:1)
我看起来你想要ignore_user_abort($bool)的行为。但是这一点对你来说无济于事,因为PHP通常有30秒的时间限制。 set_time_limit($seconds)可能会对此有所帮助。
请记住,脚本将在您的网络服务器上运行,如果用户犯了错误,用户就无法杀死脚本,所以不要忘记添加额外的检查,这样您的用户就不会产生脚本10次,让它运行,特别是如果它打电话!
我建议制作一个在Web服务器之外运行的服务器脚本,这样您就可以与守护进程通信并在其上启动/停止作业。使用简单的插座很容易做到。