Introduction to Limiter: The limiter
is an essential concept in software development,
often used to control the consumption of a finite or rate-limited resource. Common scenarios include regulating
the number of requests to an API or managing concurrent access to shared resources.
Core API Examples:
// Basic setup for rate limiting
const RateLimiter = require('limiter').RateLimiter;
const limiter = new RateLimiter({ tokensPerInterval: 5, interval: 'second' });
async function makeRequest() {
await limiter.removeTokens(1);
console.log('Sending request...');
}
// Token Bucket Algorithm
const { RateLimiterMemory } = require('limiter');
const rateLimiter = new RateLimiterMemory({ points: 5, duration: 1 });
rateLimiter.consume('user-123')
.then(() => {
console.log('Request allowed');
})
.catch(() => {
console.log('Too many requests');
});
// Leaky Bucket Algorithm
const { RateLimiterQueue } = require('limiter');
const rateLimiter = new RateLimiterQueue({
maxQueueSize: 10,
});
rateLimiter.schedule(() => {
console.log('Processing request');
return Promise.resolve();
});
Application Example:
const express = require('express');
const { RateLimiterMemory } = require('limiter');
const app = express();
const port = 3000;
const rateLimiter = new RateLimiterMemory({ points: 5, duration: 1 });
app.get('/', async (req, res) => {
try {
await rateLimiter.consume(req.ip);
res.send('Hello, world!');
} catch {
res.status(429).send('Too many requests, please try again later.');
}
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);
});
Hash: cc79c176b387b977d533e35726e0da5ee914180da6625f5915443ed67f5c3889