Rumah >rangka kerja php >Laravel >Cara menggunakan perisian tengah untuk mengehadkan aliran permintaan dalam Laravel

Cara menggunakan perisian tengah untuk mengehadkan aliran permintaan dalam Laravel

王林
王林asal
2023-11-03 18:16:47953semak imbas

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 ThrottleRequestsphp 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,
];

四、使用中间件进行请求限流
通过以上步骤,我们已经成功创建了一个请求限流的中间件,并完成了中间件的注册。接下来,我们可以在路由定义或者控制器中使用该中间件了。

  1. 在路由定义中使用中间件:

    Route::middleware('throttle:10,1')->get('/test', function () {
     return 'Hello, Laravel!';
    });

    上述代码中,我们将 throttle 中间件应用于 /test 路由,每分钟最多允许 10 次请求,并且在达到最大请求次数后,用户将会收到 429 状态码。

  2. 在控制器中使用中间件:

    class TestController extends Controller
    {
     public function __construct()
     {
         $this->middleware('throttle:10,1');
     }
    
     public function index()
     {
         return 'Hello, Laravel!';
     }
    }

通过以上代码,我们将 throttle 中间件应用于 TestController 控制器中的 index

Fail middleware yang dijana terletak dalam app /Http /Middleware direktori, contohnya: ThrottleRequests.php.

Seterusnya, kita perlu melaksanakan logik pengehadan semasa permintaan dalam kaedah handle middleware, seperti kod berikut:
rrreee

Dalam kod di atas, kami menggunakan 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. 🎜
  1. 🎜Gunakan middleware dalam definisi laluan: 🎜rrreee🎜Dalam kod di atas, kami menggunakan throttle middleware pada laluan /test, setiap minit A maksimum 10 permintaan dibenarkan, dan selepas bilangan maksimum permintaan dicapai, pengguna akan menerima kod status 429. 🎜
  2. 🎜Gunakan middleware dalam pengawal: 🎜rrreee
🎜Dengan kod di atas, kami menggunakan perisian tengah 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn