Rumah >rangka kerja php >Laravel >Cara menggunakan perisian tengah untuk mengehadkan aliran permintaan dalam Laravel
Cara menggunakan middleware untuk mengehadkan aliran permintaan dalam Laravel
Pengenalan:
Apabila kami membangunkan aplikasi web, kami sering menghadapi situasi di mana kami perlu mengehadkan permintaan pengguna, contohnya, mengehadkan bilangan permintaan yang boleh dihantar setiap minit Sebilangan permintaan tertentu, atau mengehadkan bilangan permintaan serentak untuk antara muka tertentu, dsb. Dalam rangka kerja Laravel, kita boleh melaksanakan pengehadan aliran permintaan melalui perisian tengah. Artikel ini akan memperkenalkan cara menggunakan perisian tengah untuk mengehadkan aliran permintaan dan memberikan contoh kod yang sepadan.
1. Memahami middleware dan mengehadkan permintaan semasa
Middleware ialah mekanisme yang disediakan oleh Laravel. Ia boleh campur tangan pada pelbagai peringkat pemprosesan dan proses permintaan, menapis atau meningkatkan permintaan. Pendikit permintaan ialah mekanisme yang mengehadkan kekerapan atau bilangan permintaan pengguna Ia biasanya digunakan untuk mengawal kelajuan akses sumber dan melindungi kestabilan pelayan.
2. Cipta middleware pendikit
Dalam Laravel, anda boleh mencipta perisian tengah melalui arahan Artisan: php artisan make:middleware ThrottleRequests
php artisan make:middleware ThrottleRequests
生成的中间件文件位于 app/Http/Middleware
目录下,例如:ThrottleRequests.php
。
接下来,我们需要在中间件的 handle
方法中实现请求限流的逻辑,例如下面这段代码:
<?php namespace AppHttpMiddleware; use Closure; use IlluminateCacheRateLimiter; use SymfonyComponentHttpFoundationResponse; class ThrottleRequests { protected $limiter; public function __construct(RateLimiter $limiter) { $this->limiter = $limiter; } public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1) { $key = $request->ip(); // 使用 IP 地址作为限流的关键字 if ($this->limiter->tooManyAttempts($key, $maxAttempts)) { return new Response('Too Many Attempts.', 429); } $this->limiter->hit($key, $decayMinutes * 60); return $next($request); } }
在上述代码中,我们使用了 Laravel 框架内置的 RateLimiter
类来实现请求限流的功能。TooManyAttempts
方法用于判断请求是否超过了最大允许数量,如果是则返回 429 状态码;hit
方法用于记录请求的次数,并设置时间窗口的长度。
三、注册中间件
要使我们创建的中间件生效,需要在 app/Http/Kernel.php
文件中的 $middleware
数组中注册中间件。找到该文件并添加以下代码:
protected $routeMiddleware = [ // ... 'throttle' => AppHttpMiddlewareThrottleRequests::class, ];
四、使用中间件进行请求限流
通过以上步骤,我们已经成功创建了一个请求限流的中间件,并完成了中间件的注册。接下来,我们可以在路由定义或者控制器中使用该中间件了。
在路由定义中使用中间件:
Route::middleware('throttle:10,1')->get('/test', function () { return 'Hello, Laravel!'; });
上述代码中,我们将 throttle
中间件应用于 /test
路由,每分钟最多允许 10 次请求,并且在达到最大请求次数后,用户将会收到 429 状态码。
在控制器中使用中间件:
class TestController extends Controller { public function __construct() { $this->middleware('throttle:10,1'); } public function index() { return 'Hello, Laravel!'; } }
通过以上代码,我们将 throttle
中间件应用于 TestController
控制器中的 index
app /Http /Middleware
direktori, contohnya: ThrottleRequests.php
. Seterusnya, kita perlu melaksanakan logik pengehadan semasa permintaan dalam kaedah handle
middleware, seperti kod berikut:
rrreee
RateLimiter
untuk melaksanakan fungsi mengehadkan kadar permintaan. Kaedah TooManyAttempts
digunakan untuk menentukan sama ada permintaan melebihi nombor maksimum yang dibenarkan, dan jika ya, kod status 429 dikembalikan kaedah hit
untuk merekodkan nombor tersebut; permintaan dan tetapkan tempoh tetingkap masa . 🎜🎜3 Daftar middleware🎜Untuk menjadikan middleware yang kami cipta berkesan, anda perlu mendaftarkan middleware dalam tatasusunan $middleware
dalam fail app/Http/Kernel.php
. Cari fail dan tambah kod berikut: 🎜rrreee🎜 4. Gunakan perisian tengah untuk pengehadan semasa permintaan 🎜 Melalui langkah di atas, kami telah berjaya mencipta perisian tengah pengehad semasa permintaan dan melengkapkan pendaftaran perisian tengah. Seterusnya, kita boleh menggunakan perisian tengah dalam definisi laluan atau pengawal. 🎜throttle
middleware pada laluan /test
, setiap minit A maksimum 10 permintaan dibenarkan, dan selepas bilangan maksimum permintaan dicapai, pengguna akan menerima kod status 429. 🎜throttle
pada TestController
Kaedah index
dalam pengawal. 🎜🎜Ringkasan: 🎜Artikel ini memperkenalkan cara menggunakan perisian tengah dalam Laravel untuk mengehadkan aliran permintaan dan menyediakan contoh kod yang sepadan. Dengan menggunakan perisian tengah yang mengehadkan semasa, kami boleh mengawal kekerapan dan bilangan permintaan pengguna secara fleksibel, dengan itu melindungi kestabilan dan keselamatan pelayan. Dalam pembangunan web sebenar, pendikitan permintaan adalah teknologi yang sangat penting. Saya harap artikel ini dapat membantu semua orang. Tamat 🎜Atas ialah kandungan terperinci Cara menggunakan perisian tengah untuk mengehadkan aliran permintaan dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!