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


Handling Long Running Duplicate HTTP Requests

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

我有关于LAMP网络应用程序的报告,该应用程序在服务器上构建并返回客户端大约需要30秒。客户不耐烦了,在第一次完成之前再次运行报告。这会使服务器瘫痪。有什么方法可以处理/阻止这个服务器端吗?

存储作业已经在某个地方运行的事实。

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

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

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

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

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

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

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

这种方法不仅具有对用户更友好的优点,而且对断开连接也更健壮。

30秒太长了,在当今的网络应用世界里,用户无法等待。谷歌在这段时间的1/100内搜索了整个网络。是什么让你的网络应用程序更高级或更消耗数据。如果你的一个实例即使在优化后也无法处理它,你最好将其扩展到云(或更多服务器)。如果它确实要求很高,可以将其划分为可以从几个实例并行运行的子任务。

对于你的直接问题,而不是对你没有问的问题的回答;上面的答案包含了一些技巧。您可以在频繁请求的查询到来之前生成它们,也可以只向渲染发出第一个请求,等待该请求完成后再发送结果。