Php多脚本排队


Php multiple script queuing?

我有一个html,它运行php好几次(大约20次)。类似的东西

for(i=0;i<20; i++){
$.get('script.php?id='+i,function(){...});
}

每次运行脚本时,它都会通过不同的网站(每次都是不同的网站)获取一些内容,因此每个脚本需要1到10秒才能完成并给出响应。我想同时运行所有脚本以更快,但有两件事让它变慢:第一件事是在html页面上,似乎ajax请求的队列排在前五位之后,至少chrome开发人员告诉我。。。(我想这很容易解决,我还没有找到解决方案);第二件事是php方面:即使前5个脚本是一起触发的,它们也是按顺序运行的,甚至不是按顺序运行。我放了一些

echo microtime(true);

我发现(有点惊讶)脚本开始时的时间(应该在所有脚本上几乎相同的时间运行的时间)是不同的:差异非常一致,也是10秒,就像第二个脚本在开始前等待第一个脚本结束一样。如何让所有脚本同时运行?非常感谢。

我非常坦率地建议您不要在这里尝试任何"多线程","也不要特别‘花哨’。"

将您的应用程序设计为具有某种队列(它可以是一个简单的数组)的"需要做的事情"。然后,发出"somen"数量的初始AJAX请求:当然不超过3到5。

现在,等待每个请求成功或失败的通知。在以某种方式记录了请求的状态后,取消另一个请求的队列并启动它

通过这种方式,"n请求,但不超过n的请求"将在任何时候处于活动状态,是的,它们每个都需要不同的时间,"但没人在乎。"

"JavaScript不是多线程的,"我们不需要它。一切都是由事件完成的,一次处理一个,而且工作得很好。

您的程序一直运行,直到队列为空并且所有未完成的AJAX请求都已完成(或已失败)。

当你正在执行的每个请求可能需要几秒钟才能完成时,"过于花哨"绝对没有好处。尝试将太多的TCP/IP网络请求排队也没有什么特别的优势可预测的简单性,在这种情况下,将(IMHO)统治这一天。