gpt4 book ai didi

php - 限制发送到服务器的客户端请求的数量

转载 作者:行者123 更新时间:2023-11-28 23:19:52 25 4
gpt4 key购买 nike

我有一个带有 PHPnusoapAPI,它是在带有 Apache 网络服务器的服务器上启动的.不同的远程客户端向我的 API 函数发送请求并获得响应。我想以这种方式将客户端请求限制为特定功能:

客户端每秒可以发送的请求有一个限制,这个限制存储在 mysql 数据库中。每个客户端必须能够发送不超过其限制的请求。比如一个客户端定义的最大请求数为300,则不允许每秒发送超过300个请求。

如何使用 PHP 或 Apache 实现此规则?

最佳答案

完美的解决方案是使用 PHP 来处理它。命中您 API 的每个请求都应该有一个唯一的 token 。它可以添加到像 http://yousite/api/method?token=sample_token 这样的 URL 地址。此 token 分配给特定的客户/用户。

您只需要将此操作记录到数据库中。该表将具有非常简单的结构 - id, client_id(token), created_at, action。操作不是强制性的,但将来可能会有用。

现在,您可以向 API 添加一个处理程序来限制请求的数量。您可以在 Controller 中的每个操作的开头、在创建 Controller 之前的事件监听器中或在安全层中添加它。

if (new (ApiRequestsRepository())->getNumberOfRequestsForLastHour($token) > 300) {
throw new Exception('Number of allowed requests exceeded. 300 requests per hour allowed.');
}

希望对您有所帮助。如果你说你使用什么样的框架,我可能会给你更具体的例子。

ApiRequestsRepository 是一个类,它将通过 getNumberOfRequestsForLastHour 方法为您提供一些已使用的 token 。getNumberOfRequestsForLastHour 方法将调用一个或多或少像这样的查询:

SELECT COUNT(1) FROM actions 
JOIN client ON (client.id = actions.client_id)
WHERE client.token = $token
AND WHERE created_at BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW() GROUP BY token;

关于php - 限制发送到服务器的客户端请求的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42219877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com