javascript / expert
Snippet
Generatorbasierte Zustandsbehaftete Token-Bucket-Ratenbegrenzung für Next.js-Middleware
Implementiert eine zustandsbehaftete Ratenbegrenzung nach dem Token-Bucket-Algorithmus unter Verwendung von JavaScript-Generatoren (function*). Der Generator kapselt den Bucket-Zustand über Aufrufe hinweg, berechnet Token-Auffüllungen anhand von Zeitunterschieden und verarbeitet Token-Anforderungen über bidirektionale yield-Auswertung.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
export function* createTokenBucket(capacity, refillRatePerSec) {let tokens = capacity;let lastRefill = Date.now();while (true) {const now = Date.now();const elapsedSeconds = (now - lastRefill) / 1000;tokens = Math.min(capacity, tokens + elapsedSeconds * refillRatePerSec);lastRefill = now;const requested = yield { allowed: tokens >= 1, remaining: Math.floor(tokens) };if (requested && tokens >= requested) {tokens -= requested;}}}
nextjs
Erklärung
1
export function* createTokenBucket(capacity, refillRatePerSec) {
Definiert eine Generator-Funktion, die einen iterierbaren Zustandsautomaten zur Steuerung von Request-Tokens erzeugt.
2
tokens = Math.min(capacity, tokens + elapsedSeconds * refillRatePerSec);
Berechnet das aktuelle Token-Guthaben basierend auf verstrichener Zeit und Nachfüllrate, begrenzt auf die Maximalkapazität.
3
const requested = yield { allowed: tokens >= 1, remaining: Math.floor(tokens) };
Sendet den Ratenbegrenzungsstatus an den Aufrufer und pausiert die Ausführung, bis der Aufrufer den nächsten Tokenverbrauch übergibt.