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


PHP - enforce user wait before using server resources

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

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

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

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

原谅我的无知,谢谢!

sleep如果使用PHP作为命令行工具就可以了。不过,对于网站,您的sleep将保持连接打开。你的网络服务器只有有限数量的并发连接,所以这可以用来DOS你的网站。

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

在几乎所有可能的情况下,

sleep()都是个坏主意。在您的情况下,这很糟糕,因为它保持了与客户端的连接打开,并且大多数Web服务器都有打开连接的限制。

sleep()对您没有任何帮助。用户只需同时加载页面两次,命令就会一个接一个地执行两次。

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

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

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

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

像许多网站一样,我使用Nginx,你可以使用它的速率限制来阻止特定数量的重复请求。每个IP,每小时三个请求。