imliam/laravel-throttle-simultaneous-requests

根据当前正在执行请求数量来限制当前用户的请求。

v2.0.0 2020-09-13 12:46 UTC

This package is auto-updated.

Last update: 2024-09-13 21:40:56 UTC


README

Latest Version on Packagist Total Downloads License

根据当前正在执行请求数量来限制当前用户的请求,在给出响应之前,如果有耗时较长的请求。

这有助于当某些端点比其他端点更消耗资源时,并阻止用户重试可能尚未完成的请求。

这迫使API用户以不同的方式交互,通过合理排队他们的请求而不是一直发送垃圾邮件直到达到请求限制。

当执行只有当前用户可以执行的操作时,这也有助于确保端点具有一种形式的幂等性,并且任何副作用只能在后续请求之前发生一次。

安装

您可以使用以下命令使用Composer安装此包

composer require imliam/laravel-throttle-simultaneous-requests:^2.0.0

安装到项目中后,将中间件添加到您的App\Http\Kernel::$routeMiddleware数组中。

protected $routeMiddleware = [
    // ...
    'simultaneous' => \ImLiam\ThrottleSimultaneousRequests\ThrottleSimultaneousRequests::class,
];

用法

您可以使用中间件,就像使用其他中间件一样。例如,限制特定端点只能由同一用户并发执行3次

Route::get('/', 'HomeController@index')->middleware('simultaneous:3');

为什么不用队列?

队列有其用途,可以将耗时任务推迟到以后处理,但它们并不总是最适合任务的解决方案。给定的任务可能需要使用有限的硬件资源,或者需要进行某种类型的处理,这种处理不适合并发执行。

看看Stripe如何使用并发请求限制...

为什么没有发送Retry-After头?

大多数典型的速率限制解决方案将用户在设定时间内的请求数量限制在一个数字,例如每分钟100次请求,所以包括一个Retry-After头来告诉请求者何时可以再次尝试。

由于请求完成需要更长时间,这个中间件不会向响应添加这样的头,请求者需要自行决定何时重试。

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

安全性

如果您发现任何安全问题,请通过liam@liamhammett.com发送电子邮件,而不是使用问题跟踪器。

致谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件