PHP-强制用户在使用服务器资源之前等待

PHP-强制用户在使用服务器资源之前等待,php,web,wait,Php,Web,Wait,我有一个PHP函数,我想在web上公开使用,但每次调用它时都会占用大量服务器资源 我希望发生的是,调用此函数的用户被迫等待一段时间,然后才能调用该函数(或者,至少,在他们可以第二次调用它之前) 我非常希望在服务器端强制执行这个“等待”,这样它就不会被可疑的客户端覆盖。 我计划坚持让用户登录在线帐户 有没有一种有效的方法可以让用户在不使用服务器资源的情况下等待? “sleep()”是一种合适的方法吗? 使用sleep()是否有任何建议的问题? 有更好的解决办法吗 请原谅我的无知,谢谢 这最好在服务

我有一个PHP函数,我想在web上公开使用,但每次调用它时都会占用大量服务器资源

我希望发生的是,调用此函数的用户被迫等待一段时间,然后才能调用该函数(或者,至少,在他们可以第二次调用它之前)

我非常希望在服务器端强制执行这个“等待”,这样它就不会被可疑的客户端覆盖。 我计划坚持让用户登录在线帐户

有没有一种有效的方法可以让用户在不使用服务器资源的情况下等待? “sleep()”是一种合适的方法吗? 使用sleep()是否有任何建议的问题? 有更好的解决办法吗


请原谅我的无知,谢谢

这最好在服务器级别处理。甚至没有理由为重复请求调用PHP


像许多站点一样,我使用Nginx,您可以使用它来阻止超过一定数量的重复请求。因此,每个IP每小时有三个请求。

这最好在服务器级别处理。甚至没有理由为重复请求调用PHP


像许多站点一样,我使用Nginx,您可以使用它来阻止超过一定数量的重复请求。因此,每IP、每小时有三个请求。

sleep()在几乎所有可能的情况下都是个坏主意。在您的情况下,这是不好的,因为它保持与客户端的连接处于打开状态,并且大多数Web服务器都有打开连接的限制。

sleep()在几乎所有可能的情况下都是一个坏主意。在您的情况下,这是不好的,因为它保持与客户端的连接处于打开状态,并且大多数Web服务器都有打开连接的限制。

sleep
如果您使用PHP作为一个命令行工具,那么就可以了。但对于网站,您的
睡眠将保持连接打开。您的Web服务器将只有有限数量的并发连接,因此这可以用于DOS您的站点


一种更好但更复杂的方法是使用作业队列。将任务添加到由计划脚本处理的队列中,并使用AJAX或元刷新更新网页。

sleep
例如,如果您使用PHP作为命令行工具,就可以了。但对于网站,您的
睡眠将保持连接打开。您的Web服务器将只有有限数量的并发连接,因此这可以用于DOS您的站点

一种更好但更复杂的方法是使用作业队列。将任务添加到由计划脚本处理的队列中,并使用AJAX或元刷新更新网页。

sleep()
对您毫无帮助。用户可以在同一时间加载两次页面,并且该命令将紧接着执行两次

相反,您可以在数据库中保存上次调用函数的时间戳。然后,在调用它之前,您应该检查数据库,看看是否经过了适当的时间。如果有,则调用函数并更新数据库中的时间戳。

sleep()
对您毫无帮助。用户可以在同一时间加载两次页面,并且该命令将紧接着执行两次


相反,您可以在数据库中保存上次调用函数的时间戳。然后,在调用它之前,您应该检查数据库,看看是否经过了适当的时间。如果有,调用函数并更新数据库中的时间戳。

如果您计划强制用户登录,那么问题就简单多了


在数据库中记录用户和他们上次使用您的资源消耗服务的时间,并测量当时和现在之间的时间差。如果时差太小,请拒绝访问并显示错误消息

如果您计划强制用户登录,那么问题就简单多了



在数据库中记录用户和他们上次使用您的资源消耗服务的时间,并测量当时和现在之间的时间差。如果时差太小,请拒绝访问并显示错误消息

你为什么认为睡觉会有帮助?我可以相信它不会:这个问题的动机是找出什么可行。你真正想做什么?费率限制?睡眠问题
?用户仍然可以排队并同时运行多个请求。为什么您认为睡眠会有所帮助?我可以相信它不会:这个问题的动机是找出什么可行。你真正想做什么?费率限制?睡眠问题
?用户仍然可以排队并同时运行多个请求。@RonaldStewart,这是行业标准的解决方案。如果您使用Apache,您还可以启用rate-limiting.Deformes-首先只显示第一段。@RonaldStewart,这是行业标准解决方案。如果您使用Apache,还可以启用速率限制。抱歉-起初只显示第一段。是的,这正是我所担心的。谢谢你帮我确认。是的,这正是我担心的。感谢您为我确认这一点。如果我使用AJAX,那么这可能是客户端的,并且可能会被客户端过度使用?这不对吗?AJAX不会运行任务-它只会检查运行任务的作业的进度哦,我明白了!谢谢所以嗯。。。问题变成了。。。如何设置作业队列?;)将每个作业写入数据库,并使用cron运行处理器脚本。这个问题的细节有点大,但是如果你被卡住了,试着问一下吧!如果我使用AJAX,那可能是客户端的,客户端可能会过度使用它?这不对吗?AJAX不会运行任务-它只会检查运行任务的作业的进度哦,我明白了!谢谢所以嗯。。。问题变成了。。。