लिमिटर
यह फाइबर के लिए एक मिडलवेयर है जो सार्वजनिक एपीआई और/या एंडप्वाइंट (जैसे, पासवर्ड रीसेट) पर दोहरावयाचिकित्सा को सीमित करने के लिए उपयोग किया जाता है। इसका उपयोग एपीआई क्लाइंट, वेब क्रॉलर, या अन्य कार्यों की दर सीमित करने के लिए भी उपयोगी है जो रेट सीमा लगाने की आवश्यकता होती है।
नोट: यह मिडलवेयर हमारे स्टोरेज पैकेज का उपयोग एक समरूपित इंटरफेस के माध्यम से विभिन्न डेटाबेस का समर्थन करने के लिए करता है। डिफ़ॉल्ट कॉन्फ़िगरेशन डेटा को मेमोरी में स्टोर करती है, और आप नीचे नमूना देखने के लिए अन्य डेटाबेस का इस्तेमाल कर सकते हैं।
नोट: डिफ़ॉल्ट रूप से यह मॉड्यूल अन्य प्रक्रियाओं/सर्वरों के साथ स्थिति साझा नहीं करता है।
हस्ताक्षर
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,
}))