|
| | ConnectionLimiter (const int &maxConn=20, const int &idleTimeout=60) |
| | 构造函数。 更多...
|
| |
| void | setConnectStrategy (const RateLimitType &type) |
| | 设置“连接速率限流”所使用的策略。 更多...
|
| |
| void | setRequestStrategy (const RateLimitType &type) |
| | 设置“IP 级请求限流”所使用的策略。 更多...
|
| |
| void | setPathStrategy (const RateLimitType &type) |
| | 设置“path 级请求限流”所使用的策略。 更多...
|
| |
| void | setPathLimit (const std::string &path, const int ×, const int &secs) |
| | 设置某个路径的额外限流规则(path 级)。 更多...
|
| |
| DefenseDecision | allowConnect (const std::string &ip, const int &fd, const int ×, const int &secs) |
| | 对新建立的连接进行安全裁决(IP 级)。 更多...
|
| |
| DefenseDecision | allowRequest (const std::string &ip, const int &fd, const std::string_view &path, const int ×, const int &secs) |
| | 对已建立连接的一次请求进行安全裁决。 更多...
|
| |
| void | clearIP (const std::string &ip, const int &fd) |
| | 在连接断开时回收对应 fd 的状态。 更多...
|
| |
| bool | connectionDetect (const std::string &ip, const int &fd) |
| | 检测并清理僵尸连接(fd 级)。 更多...
|
| |
统一的连接与请求安全裁决器(IP 级 + fd 级,多策略限流 + 黑名单)。
ConnectionLimiter 是一个“安全门(Security Gate)”, 所有连接建立与请求处理在进入业务逻辑前,都必须经过该类的裁决。
本类不直接执行业务行为(如 close / send / sleep), 而是返回一个 DefenseDecision 结果,由外层统一执行。
设计概览
本类实现的是一个分层防御模型:
- IP 级防御:
- 并发连接数限制(maxConnections)
- 建连速率限制(connectRate)
- IP 风险评分(badScore)
- 临时黑名单(blacklist,带 TTL)
- fd 级防御:
- 请求速率限制(requestRate)
- path 级额外限流(pathRate)
- 连接活动时间记录(lastActivity)
防御裁决语义
allowConnect / allowRequest 的返回值为 DefenseDecision:
- ALLOW (0):
- DROP (1):
- 无视本次请求(不回应、不处理)
- 主要用于 request 阶段的轻度防御
- CLOSE (2):
- 注解
- connect 阶段由于 TCP 连接已建立,通常只使用 ALLOW / CLOSE
- DROP 主要用于 request 阶段(fd 已存在时)
策略与限流
本类支持多种限流策略(见 RateLimitType):
- Cooldown
- FixedWindow
- SlidingWindow
- TokenBucket
不同维度使用不同策略:
- 建连速率:connectStrategy(默认 Cooldown)
- fd 级请求速率:requestStrategy(默认 SlidingWindow)
- path 级请求速率:pathStrategy(默认 SlidingWindow)
线程安全
- 警告
- 本类本身不包含锁:
- table / pathConfig / blacklist 的并发安全 需由上层保证(如事件循环线程、外部互斥锁等)。
生命周期说明
- allowConnect:
- 判断 IP 是否允许进入应用层
- 在 ALLOW 时登记 fd
- allowRequest:
- clearIP:
- connectionDetect: