Php多个脚本排队?

时间:2016-07-19 20:56:06

标签: php ajax multithreading

我有一个运行PHP几次(大约20)的HTML。 像

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

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

echo microtime(true);

围绕脚本来获取脚本缓慢的地方以及我发现的内容(有点惊讶)是脚本开头的时间(应该在所有脚本上几乎同时运行的时间)是不同:差异非常一致,也就是10秒,如果第二个脚本在开始之前等待第一个结束。如何让所有脚本同时运行?谢谢。

1 个答案:

答案 0 :(得分:0)

我非常坦率地建议您在这里尝试“多线程”,“也不要特别”花哨。“

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

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

通过这种方式,“ n 请求,但不超过 n 请求,”任何时候都将处于活动状态,是的,他们每个都会采取不同的一段时间,“但没有人关心。”

“JavaScript不是多线程的”,我们不需要它。一切都是通过一次一个地处理的事件来完成的,而且恰好可以正常工作。

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

当您执行的请求可能需要几个才能完成时,“过于花哨”绝对没有优势。尝试排队太多TCP / IP网络请求也没有特别的优势。 可预测的简单,在这种情况下,将(恕我直言)统治这一天。