进度条的Codeigniter多线程



我正试图获得一个进度条,显示一个长进程的实时进度。我想我已经完成了大部分,但我遇到了一个有趣的障碍。

简而言之,我有一个按钮,当它启动时会调用一个JavaScript函数,该函数将做两件事:

  1. 启动一个异步Ajax调用来启动我的长时间运行的脚本。这个脚本将用某些关键代码块的进度更新一个表,所以一个表将有一个从0到100的数字和一些消息
  2. 在计时器中启动一个同步调用,读取数据库表中为用户更新进度条所做的进度

当我启动它时,我注意到(2(将等待(1(。我注意到调用已发送(在DeveloperTools->Debug中(,但(我相信(CodeIgniter会将第二个Ajax调用排队,直到第一个调用完成。

有没有办法绕过这一点,让我的(2(调用多次往返于DB,而(1(仍在执行?

只是放一些代码:

function button_pressed_for_long_action(type, id)
{
//start the timer
timer = window.setInterval(get_progress, 3000);
//call the long script");
$.ajax({
url: "/the URL for long action/",
dataType: "json",    
method: "POST",
data: {
type : type,
id : id
},
success:function(data) 
{
},
error: function( data, status, error ) { 
alert("error");
alert(error);
}
}); 
}

以及计时器调用的获取进度的函数:

function get_progress()
{
$.ajax({
url: "/url to get process/",
dataType: "json",    
method: "POST",
async : false,
data: {
some_id : some_id
},
success:function(data) 
{
//update UI
if (progress < 100) 
{
//exit if not done
return;
}

//script is finished
window.clearInterval(timer);

},
error: function( data, status, error ) { 
alert("error");
alert(error);
}
}); 

}

URL调用CodeIgniter控制器函数,读取DB并正确返回带有信息的JSON。

问题只是获取进度(2(要等到(1(完成。

提前感谢!

经过更多的挖掘,我找到了它。PHP似乎像我想的那样将请求排队。队列是每个会话的。因此,如果会话被关闭,那么锁定就会解除,另一个呼叫就可以通过。

因此,在我的情况下,我需要在长执行脚本的开头有以下行:

The_long_script_controller.php


function execute_long_script()
{
//this is the line I needed:
session_write_close();
//then do the full long processing
}

全部基于此线程:两个同时的AJAX请求获胜';t并行运行

这修复了我的问题

相关内容

  • 没有找到相关文章

最新更新