处理长时间运行的重复HTTP请求

时间:2012-08-24 21:18:26

标签: php mysql apache httpwebrequest

处理在服务器上接收重复HTTP请求的好方法是什么?

我有一个关于LAMP网络应用程序的报告,需要大约30秒才能在服务器上构建并返回到客户端。客户端不耐烦并在第一次完成之前再次运行报告。这让服务器陷入困境。有没有办法处理/阻止这个服务器端?

4 个答案:

答案 0 :(得分:3)

存储作业已在某处运行的事实。

在生成报告的代码中,检查是否已在运行报告。如果是这样,请不要再运行另一个。

当报告完成生成或某些超时到期以处理异常情况时,请取消存储该事实。

您可以使用数据库,memcached服务器,redis,文本文件,写入共享内存......

答案 1 :(得分:1)

您可以尝试返回202响应,直到您在服务器上构建的内容完成为止,然后提供它的缓存副本。

答案 2 :(得分:1)

如今,告诉用户正在处理的事情往往是用AJAX完成的。

通常,您将请求发送到您的服务器,然后服务器将返回202响应和一个地址(可能带有UUID),以便浏览器查找结果(您不一定要直接显示,但保留在脚本的后台:您也可以直接为不支持JavaScript的客户端显示它。)

然后,您将在后台向该地址发出后续请求,并在准备好后显示结果。

这种方法不仅具有更加用户友好的优势,而且还可以更加强大地防止断线。

答案 3 :(得分:0)

30秒太长了,让用户在今天的网络应用程序世界中等待。 Google会在1/100的时间内搜索整个网络。是什么让您的Web应用程序更高级或数据消耗。如果您的一个实例即使在优化后也无法处理它,您最好将其扩展到云(或更多服务器)。如果它真的如此苛刻,请将其划分为可以从多个实例并行运行的子任务。

对于你的直接问题,而不是你没有问过的问题的答案;上面的答案有一些技巧。您可以在它们出现之前生成经常请求的查询 - 或者您只能对呈现进行第一次请求,并在发送结果之前等待该请求完成。