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

Php 处理长时间运行的重复HTTP请求,php,mysql,apache,httpwebrequest,Php,Mysql,Apache,Httpwebrequest,处理在服务器上接收重复HTTP请求的好方法是什么 我有一个LAMP web应用程序的报告,它需要30秒才能在服务器上构建并返回客户端。客户变得不耐烦,在第一次报告完成之前再次运行报告。这会使服务器陷入困境。有没有办法处理/阻止此服务器端?存储作业已在某处运行的事实 在生成报告的代码中,检查报告是否已在运行。如果是这样,就不要再跑了 当报表生成完成或超时处理异常情况时,取消存储该事实 您可以使用数据库、memcached服务器、redis、文本文件、写入共享内存……您可以尝试返回202响应,直到您

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


我有一个LAMP web应用程序的报告,它需要30秒才能在服务器上构建并返回客户端。客户变得不耐烦,在第一次报告完成之前再次运行报告。这会使服务器陷入困境。有没有办法处理/阻止此服务器端?

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

在生成报告的代码中,检查报告是否已在运行。如果是这样,就不要再跑了

当报表生成完成或超时处理异常情况时,取消存储该事实


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

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

现在,告诉用户正在处理的内容往往是用AJAX完成的

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

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


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

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


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

您是否可以在夜间预生成报告,然后链接到该报告?如果客户得到他们自己的定制报告,这将不起作用,但如果每次都是相同的报告,它应该可以很好地工作。无论计算机变得多么强大,仍然有许多任务可能需要30秒以上才能完成,特别是因为并非所有任务都是完全可并行的。“向云扩展”听起来像是你读了太多的营销材料……或者你可以通过利用云服务以更少的投资达到更高的峰值处理能力……关键是,如果你想留住访问者,你不能让用户等那么久。如果某项任务需要如此长的处理时间,那么它需要转换为后台服务,并且被站点上的访问者视为后台工作。其他的一切都会把访问者赶走,当然大多数请求都会被取消。同样,并不是每个任务都可以分为子任务,这样即使在功能强大的现代机器上,仍然保持序列的任务也可以在30秒内完成。在这些情况下(现在仍然存在),把它扔到“云端”不会有帮助。问题并没有具体说明正在运行什么类型的报告,也没有具体说明需要什么类型的用户:猜测访问者是否会离开是毫无意义的。等待网页请求30秒会让用户取消它——不管他们在按下按钮之前收到几次警告,或者他们是否在家里。把它从一个有限的环境扔到一个处理能力更强的环境中,几乎可以帮助所有可能的情况。