लिमिटर

यह फाइबर के लिए एक मिडलवेयर है जो सार्वजनिक एपीआई और/या एंडप्वाइंट (जैसे, पासवर्ड रीसेट) पर दोहरावयाचिकित्सा को सीमित करने के लिए उपयोग किया जाता है। इसका उपयोग एपीआई क्लाइंट, वेब क्रॉलर, या अन्य कार्यों की दर सीमित करने के लिए भी उपयोगी है जो रेट सीमा लगाने की आवश्यकता होती है।

नोट: यह मिडलवेयर हमारे स्टोरेज पैकेज का उपयोग एक समरूपित इंटरफेस के माध्यम से विभिन्न डेटाबेस का समर्थन करने के लिए करता है। डिफ़ॉल्ट कॉन्फ़िगरेशन डेटा को मेमोरी में स्टोर करती है, और आप नीचे नमूना देखने के लिए अन्य डेटाबेस का इस्तेमाल कर सकते हैं।

नोट: डिफ़ॉल्ट रूप से यह मॉड्यूल अन्य प्रक्रियाओं/सर्वरों के साथ स्थिति साझा नहीं करता है।

हस्ताक्षर

func New(config ...Config) fiber.Handler

उदाहरण

फाइबर वेब फ्रेमवर्क का हिस्सा के रूप में मिडलवेयर पैकेज को आयात करें:

import (
  "github.com/gofiber/fiber/v2"
  "github.com/gofiber/fiber/v2/middleware/limiter"
)

फाइबर ऍप बनाने के बाद, आप निम्नलिखित विकल्पों का उपयोग कर सकते हैं:

// डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ आरंभ करें
app.Use(limiter.New())

// या कस्टम कॉन्फ़िगरेशन के साथ विस्तारित करें
app.Use(limiter.New(limiter.Config{
    Next: func(c *fiber.Ctx) bool {
        return c.IP() == "127.0.0.1"
    },
    Max:          20,
    Expiration:     30 * time.Second,
    KeyGenerator:          func(c *fiber.Ctx) string {
        return c.Get("x-forwarded-for")
    },
    LimitReached: func(c *fiber.Ctx) error {
        return c.SendFile("./toofast.html")
    },
    Storage: myCustomStorage{},
}))

स्लाइडिंग विंडो

आप मानक स्थिर विंडो एल्गोरिदम के बजाय स्लाइडिंग विंडो एल्गोरिदम को सक्षम कर सकते हैं।

उदाहरण कॉन्फ़िगरेशन निम्नलिखित है:

app.Use(limiter.New(limiter.Config{
    Max:            20,
    Expiration:     30 * time.Second,
    LimiterMiddleware: limiter.SlidingWindow{},
}))

इसका अर्थ है कि प्रत्येक विंडो में पिछली विंडो (अगर कोई है) को मध्यान्ध लेकर चलाया जाएगा। दिए गए दर के लिए सूत्र है:

weightOfPreviousWindow = previous window's amount of requests * (whenNewWindow / Expiration)
rate = weightOfPreviousWindow + current window's amount of requests.

कॉन्फ़िगरेशन

प्रॉपर्टी प्रकार विवरण डिफ़ॉल्ट
Next func(*fiber.Ctx) bool अगला वास्तविकिकरण साथी लौटाने पर इस मिडलवेयर को छोड़ने के लिए एक फ़ंक्शन को परिभाषित करता है। nil
Max int Expiration सेकंड्स के भीतर अधिकतम कनेक्शनों की संख्या, अगर इससे अधिक हो जाए, तो 429 प्रतिसाद देता है। 5
KeyGenerator func(*fiber.Ctx) string KeyGenerator आपको कस्टम की गई कुंजियाँ जेनरेट करने की अनुमति देता है, डिफ़ॉल्ट रूप से c.IP() का उपयोग करता है। c.IP() का उपयोग करता है वाला फ़ंक्शन
Expiration time.Duration अनुरोध रिकॉर्ड्स को मेमोरी में रखने के लिए समय। 1 * time.Minute
LimitReached fiber.Handler सीमा पहुंचने पर कॉल किया जाता है। 429 प्रतिसाद भेजने वाला फ़ंक्शन
SkipFailedRequests bool अगर सत्य है, तो स्थिति कोड >= 400 के साथ अनुरोधों को गिनने की आवश्यकता नहीं है। झूठ
SkipSuccessfulRequests bool अगर सत्य है, तो स्थिति कोड < 400 के साथ अनुरोधों को गिनने की आवश्यकता नहीं है। झूठ
Storage fiber.Storage मिडलवेयर की स्थिति को स्टोर करने के लिए स्टोर। मौजूदा प्रक्रिया के लिए मेमोरी स्टोरेज
LimiterMiddleware LimiterHandler LimiterMiddleware लिमिटर मिडलवेयर को लागू करने वाला स्ट्रक्चर है। एक नया स्थिर विंडो रेट लिमिटर
Duration (Deprecated) time.Duration अयोग्य: Expiration का उपयोग करें। -
Store (Deprecated) fiber.Storage अयोग्य: Storage का उपयोग करें। -
Key (Deprecated) func(*fiber.Ctx) string अयोग्य: KeyGenerator का उपयोग करें। -

नोट: अगर कस्टम स्टोरेज Storage इंटरफेस का उपयोग करता है, तो आप कस्टम स्टोरेज का उपयोग कर सकते हैं - अधिक जानकारी और उदाहरणों के लिए कृपया store.go को देखें।

डिफ़ॉल्ट कॉन्फ़िगरेशन

var ConfigDefault = Config{
    Max:        5,
    Expiration: 1 * time.Minute,
    KeyGenerator: func(c *fiber.Ctx) string {
        return c.IP()
    },
    LimitReached: func(c *fiber.Ctx) error {
        return c.SendStatus(fiber.StatusTooManyRequests)
    },
    SkipFailedRequests: false,
    SkipSuccessfulRequests: false,
    LimiterMiddleware: FixedWindow{},
}

कस्टम स्टोरेज/डेटाबेस

आप हमारे storage पैकेज में किसी भी स्टोरेज विधि का उपयोग कर सकते हैं।

storage := sqlite3.New() // github.com/gofiber/storage/sqlite3 से
app.Use(limiter.New(limiter.Config{
    Storage: storage,
}))