我想向服务器发送一个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命令中,并完成我的目标,但我觉得必须有一个更简单的方法。如果我弄糊涂了,让我知道,我会编辑的。
编辑:php执行停止后,用户离开页面?这适用于这里吗?
看起来您想要ignore_user_abort($bool)的行为。但是这并不能帮助您,因为PHP通常有30秒的时间限制。Set_time_limit ($seconds)可能会帮助你解决这个问题。
请记住,脚本将在您的web服务器上运行,如果用户犯了错误,用户将无法杀死脚本,所以不要忘记添加额外的检查,这样您的用户就不会生成脚本10次并让它运行,特别是当它拨打电话时!
我建议在web服务器之外运行一个服务器脚本,这样你就可以与守护进程通信并在其上启动/停止作业。使用简单的套接字非常容易。