Perisian tengah kadar menyediakan keupayaan mengehadkan kadar untuk rangka kerja web Iris. Ia membolehkan pembangun mengawal kadar permintaan kepada aplikasi mereka, memastikan penggunaan yang adil dan mencegah penyalahgunaan. Perisian tengah adalah berdasarkan algoritma baldi token, yang merupakan kaedah popular untuk mengehadkan kadar.
Untuk menggunakan perisian tengah kadar, anda perlu mengimportnya dalam aplikasi Iris anda:
import "github.com/kataras/iris/v12/middleware/rate"
Untuk menggunakan pengehad kadar, anda perlu mencipta aplikasi Iris dan mendaftarkan perisian tengah. Di bawah ialah contoh cara menyediakan pengehad kadar:
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") limit := rate.Limit(1, 5, rate.PurgeEvery(time.Minute, 5*time.Minute)) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
Contoh ini membenarkan 1 permintaan sesaat dengan saiz pecah maksimum 5. Ia juga membersihkan entri lama setiap minit jika ia tidak dilihat selama 5 minit.
Contoh ini menunjukkan cara menggunakan kadar.Setiap pembantu untuk menyediakan pengehad kadar:
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Use rate.Every helper to set up the rate limiter. limit := rate.Limit(rate.Every(time.Minute), 5) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
Contoh ini menunjukkan cara menyediakan pengehad kadar yang menggunakan kunci API dan bukannya alamat IP jauh pelanggan:
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Use API key for rate limiting. app.Use(useAPIKey) limit := rate.Limit(rate.Every(time.Minute), 300, rate.PurgeEvery(5*time.Minute, 15*time.Minute)) app.Use(limit) app.Get("/list", list) app.Listen(":8080") } func useAPIKey(ctx iris.Context) { apiKey := ctx.Header("X-API-Key") if apiKey == "" { ctx.StopWithStatus(iris.StatusForbidden) return } rate.SetIdentifier(ctx, apiKey) ctx.Next() } func list(ctx iris.Context) { ctx.JSON(iris.Map{"key": "value"}) }
Contoh ini menunjukkan cara menetapkan pengendali tersuai untuk dilaksanakan apabila melebihi had kadar:
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Set a custom exceed handler. limit := rate.Limit(1, 5, rate.ExceedHandler(func(ctx iris.Context) { ctx.StopWithStatus(429) })) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
Contoh ini menunjukkan cara menyimpan data tersuai untuk setiap pelanggan:
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Store custom data for each client. limit := rate.Limit(1, 5, rate.ClientData(func(ctx iris.Context) any { return ctx.RemoteAddr() })) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
Penghadan Kadar: Fungsi kadar.Had digunakan untuk mencipta pengehad kadar baharu. Ia memerlukan tiga parameter:
Algoritma Baldi Token: Algoritma ini mengawal kadar permintaan dengan mengekalkan baldi token. Setiap permintaan menggunakan token, dan token ditambahkan pada baldi pada kadar tetap. Jika baldi kosong, permintaan ditolak.
Algoritma baldi token ialah cara yang mudah dan cekap untuk mengawal kadar permintaan. Ia berfungsi seperti berikut:
Untuk butiran lanjut, rujuk artikel Wikipedia tentang Token Bucket.
Perisian tengah ini menyediakan cara yang teguh dan fleksibel untuk melaksanakan pengehadan kadar dalam aplikasi Iris anda. Dengan menggunakan algoritma baldi token, ia memastikan penggunaan yang adil dan menghalang penyalahgunaan, menjadikan aplikasi anda lebih dipercayai dan selamat.
Untuk lebih banyak contoh dan penggunaan terperinci, rujuk dokumentasi rasmi Iris.
Atas ialah kandungan terperinci Permintaan Mengehadkan Kadar Pertengahan untuk Iris. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!