php - 1330316 AJAX 请求会使我的服务器崩溃吗?

标签 php javascript jquery ajax codeigniter

我正在构建一个小型 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/

相关文章:

php - 单击 x 轴以获取向下钻取报告时,在 highchart 列向下钻取图表上触发单击事件

php - 基于页面 ID 的 Wordpress 条件侧边栏部分

javascript - 相对位置没有响应

javascript - 将 multipart/x-mixed-replace 与 XMLHttpRequest 结合使用

jquery - 如何将 div 放在切换幻灯片菜单旁边?

php - 将字符串作为参数传递给函数时使用双引号与单引号

php - 如何将 MySQL DateTime 转换为 PHP Y-m-d?

javascript - UnexpectedToken 我一辈子都找不到的错误

javascript - javascript中的正则表达式获取<span>标签的内容

javascript - 使用 Twitter Bootstrap 下拉切换触发另一个下拉切换或 div