我正在构建一个小型 PHP/Javascript 应用程序,它将对美国所有州的所有城市进行一些处理。这将向上舍入为总共 (52 x 25583) = 1330316 或更少的需要处理的项目。
每个项目的处理大约需要 2-3 秒,因此用户可能需要盯着这个页面 1-2 个小时(或者至少在做其他事情时将其最小化)。
为了给用户最大的反馈,我正在考虑通过javascript控制页面的处理,基本上是这样的:
var current = 1;
var max = userItems.length; // 1330316 or less
process();
function process()
{
if (current >= max)
{
alert('done');
return;
}
$.post("http://example.com/process", {id: current}, function()
{
$("#current").html(current);
current ++;
process();
}
);
}
在 html 中,我将有以下状态消息,每当调用 process()
函数时,该消息都会更新:
<div id="progress">
Please wait while items are processed.
<span id="current">0</span> / <span id="max">1330316</span> items have been processed.
</div>
希望你们都能明白我希望它如何工作。
我唯一担心的是,如果同时向服务器发出这 1330316 个请求,是否有可能导致服务器崩溃/瘫痪?如果是这样,如果我在服务器端 PHP 代码中使用 sleep(3);
对每个请求额外等待 2 秒,事情会变得更好吗?
或者是否有不同的机制来向用户显示快速反馈,例如轮询,而不需要我干扰 apache 或服务器?
最佳答案
如果你可以在服务器中放置一个cronjob,我相信它会工作得更好。使用 cronjob 进行实际处理并使用 Javascript 定期更新状态(例如每 10 秒)怎么样?
然后,第一步是触发 cronjob PHP 将检查的一些标志。如果它处于事件状态,则必须执行该任务(您可以使用一些临时文件来告诉脚本必须处理哪些记录)。
cronjob 将执行该任务,然后在其迭代完成时关闭该标志。
这样,用户甚至可以关闭您的应用程序并稍后再检查,服务器将处理所有处理,而不会被客户端事件中断。
关于php - 1330316 AJAX 请求会使我的服务器崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2263103/