什么是处理在服务器上接收重复 HTTP 请求的好方法?
我有关于 LAMP Web 应用程序的报告,该应用程序需要大约 30 秒才能在服务器上构建并返回到客户端。客户不耐烦并在第一次完成之前再次运行报告。这会使服务器陷入困境。有没有办法处理/防止这个服务器端?
什么是处理在服务器上接收重复 HTTP 请求的好方法?
我有关于 LAMP Web 应用程序的报告,该应用程序需要大约 30 秒才能在服务器上构建并返回到客户端。客户不耐烦并在第一次完成之前再次运行报告。这会使服务器陷入困境。有没有办法处理/防止这个服务器端?
存储作业已经在某处运行的事实。
在生成报告的代码中,检查是否已经在运行。如果是这样,请不要运行另一个。
当报告完成生成或某些超时到期以处理异常情况时,取消存储该事实。
您可以使用数据库、memcached 服务器、redis、文本文件、写入共享内存...
您可以尝试返回 202 响应,直到您在服务器上构建的任何内容都完成,然后提供它的缓存副本。
如今,告诉用户正在处理某些事情往往是使用 AJAX 来完成的。
通常,您会将请求发送到您的服务器,然后服务器会返回一个 202 响应和一个地址(可能带有 UUID)供浏览器查找结果(您不一定会直接显示,但会保留在后台)您的脚本:您也可以直接为不支持 JavaScript 的客户端显示此内容)。
然后,您将在后台向该地址发出后续请求,并在它准备好时显示结果。
这种方法不仅具有对用户更友好的优点,而且对断开连接也更加健壮。
30 秒对于让用户在当今的 Web 应用程序世界中等待太长了。谷歌用 1/100 的时间搜索整个网络。是什么让您的 Web 应用程序更先进或更消耗数据。如果您的一个实例即使在优化后也无法处理,您最好将其扩展到云(或更多服务器)。如果确实要求很高,请将其划分为可以从多个实例并行运行的子任务。
对于您的直接问题,而不是对您未提出的问题的回答;上面的答案有一些技巧。您可以在频繁请求的查询出现之前生成它们 - 或者您可以只对渲染发出第一个请求并等待该请求完成,然后再发送结果。