代码之家  ›  专栏  ›  技术社区  ›  EmmyS

如何创建附加到服务器端进程的进度条?

  •  1
  • EmmyS  · 技术社区  · 14 年前

    我们刚刚遇到了云主机的问题-他们更改了apache设置以强制缩短页面超时时间,现在在某些需要15秒以上(客户端可以接受;我们正在处理大量数据)的进程(报表创建等)中,我们得到一个错误:

    The proxy server received an invalid response from an upstream server.
    The proxy server could not handle the request POST /administrator/index.php.
    
    Reason: Error reading from remote server
    

    我已经确认了我们的代码仍然在后台正确运行,并再次向主机确认这只是一个超时。他们的建议是创建一个与后端代码相关联的进度条;这样,apache就知道有些事情仍在进行,不会超时。

    我已经完成了与页面加载事件相关联的进度条(即当加载所有图像时,等等),但是不知道如何创建与后端代码相关联的进度条。这是一个Joomla站点,用mvc php编码,导致问题的代码是模型的一部分——可能涉及的各个部分都在执行大量的查询。表被正确地索引,查询被优化;问题不在于如何使进程花费更少的时间——因为我们在云服务器上,超时限制可以在明天更改为5秒,而不会出现任何警告。我需要的是有人告诉我如何创建进度条的正确方向,以便它实际上与模型中运行的函数相关联。

    有什么想法吗?就目前而言,我完全是个初学者。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Tyler Carter    14 年前

    我能想到的最简单的方法是使用两个步骤:

    1. 让模型在到达临界点时将事件写到文本文件或其他文件中。
    2. 使用一些ajax方法让页面定期检查该文件的更新,并更新进度条。
        2
  •  0
  •   Tyler Carter    14 年前

    无论后台进程做什么,都应该以每X秒或在其流中的设置位置完成的百分比更新文件或数据库条目。然后可以每隔X秒从Javascript调用另一个脚本,它通过数据库记录返回完成的百分比。

    updateRecord(0);
    readLargeFile();
    
    updateRecord(25);
    encodeLargeFile();
    
    updateRecord(50);
    writeLargeFile();
    
    updateRecord(75);
    celebrate();
    
    updateRecord(100);