在Ubuntu 16.04上运行Yii2。我想启动后台任务,然后查询它的状态。任务开始正常,但来自客户端的查询在服务器任务结束之前不会得到响应。
服务器代码
function actionRun($arguments)
{
$paramsJson = json_encode($arguments);
$script = 'php /var/www/html/app/yii consolecontroller/action';
$command = "{$script} '{$paramsJson}' > /dev/null 2>&1 &";
exec($command);
}
客户代码
$('#buttonSubmit').on('click', function (event) {
event.preventDefault();
setTimeout(function () {updateJobProgress();}, 100);
$.ajax({
url: printForm.attr('action'),
type: 'post',
data: printForm.serialize()
});
function updateJobProgress() {
var reportJob = $('input[name="reportJobId"]');
$.ajax({
url:reportJob.data('status'),
data:{reportJobId: reportJob.val()},
success:function(data) {
if (data.progressStatus < 5000) {
reportJob.html('processing');
} else {
reportJob.html('done');
}
}
});
setTimeout(function() {updateJobProgress();}, 700);
}
});
答案 0 :(得分:0)
经过一些测试,我发现Yii2正在处理ob刷新和会话。 AJAX调用在190ms内返回响应200,但后续的ajax调用检查状态没有得到响应。
后续请求未获得响应的原因是因为xdebug。我关掉了xdebug,一切正常。我编辑了文件/etc/php/7.0/mods-available/xdegub.ini
并将xdebug.remote_autostart
从1更改为0.这会阻止xdebug一直运行。现在,当我想使用xdebug时,我只是在浏览器上使用扩展程序来激活它。