背景与价值WebSocket消息频繁可能导致资源耗尽。速率与配额治理可保护系统稳定与体验。统一规范每连接速率:每秒消息数上限(如≤50)。每用户配额:分钟级总消息上限(如≤1000)。阻断策略:超过阈值拒绝并短期封禁。核心实现滑动窗口计数class Window { buckets = new Map<string, { ts: number; count: number }>() now(): number { return Date.now() } inc(key: string, windowMs: number): number { const cur = this.buckets.get(key); const n = this.now(); if (!cur || n - cur.ts > windowMs) { this.buckets.set(key, { ts: n, count: 1 }); return 1 } cur.count++; return cur.count } } 速率与配额门禁class WsQuota { w = new Window() maxPerConnPerSec = 50 maxPerUserPerMin = 1000 ban = new Set<string>() allow(connId: string, userId: string): boolean { if (this.ban.has(userId)) return false const c = this.w.inc('c:' + connId, 1000) const u = this.w.inc('u:' + userId, 60_000) if (c > this.maxPerConnPerSec || u > this.maxPerUserPerMin) { this.ban.add(userId); return false } return true } } 落地建议在网关或应用层统一进行消息速率与配额校验,超过阈值拒绝与封禁。配合握手层来源与令牌校验,共同防止滥用与攻击。验证清单每连接每秒是否控制在上限;每用户分钟配额是否生效;封禁是否落地。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部