import type { VextApp } from "../../types/app.js"; /** * cluster-checks.ts — Cluster 模式兼容性检测模块 * * 在 cluster 模式下,每个 Worker 是独立的 V8 实例,内存不共享。 * 这导致某些基于内存的功能(如 rate limiter)在多 Worker 环境下行为不一致。 * * 本模块在每个 Worker 的 bootstrap 完成后执行检测(步骤⑨ onReady 之前), * 对潜在问题打印 WARN 日志。仅警告,不阻止启动——用户可能故意使用内存 store * (如测试环境或单 Worker cluster)。 * * 检测项: * 1. 内存型 rate limiter 警告(每个 Worker 独立计数,实际限流 = N × max) * 2. 后续可扩展:session store、缓存一致性等 * * 触发条件: * - cluster.workers > 1 且框架内置 rate limiter 未被 app.setRateLimiter() 替换 * - cluster.workers = 1 或 cluster 未启用 → 不打印 * - rateLimit.enabled = false → 不打印 * - 已调用 app.setRateLimiter() → 不打印(假设用户已处理) * * @module lib/cluster/cluster-checks * @see 12-cluster.md §4.1(Cluster 模式启动检测与警告) */ /** * Cluster 兼容性检测结果 * * 每个检测项返回一个 CheckResult。 * 主要用于测试验证检测逻辑是否正确触发。 */ export interface ClusterCheckResult { /** 检测项名称 */ name: string; /** 是否触发了警告 */ warned: boolean; /** 警告消息(仅 warned=true 时存在) */ message?: string; } /** * checkClusterCompatibility — 检测 cluster 模式下的潜在兼容性问题 * * 在 Worker bootstrap 完成后调用(步骤⑨ onReady 之前)。 * 检查当前配置是否存在多 Worker 下的已知问题,并输出 WARN 日志。 * * 设计要点: * - 仅打印 WARN,不抛出异常,不阻止启动 * - 使用 app.logger(结构化日志),而非 console.warn * - 返回检测结果数组,便于测试验证 * * @param app VextApp 实例(从中读取 config 和检测 rate limiter 状态) * @param workerCount 实际 Worker 数量(由 Master 传入或从 config 推算) * @returns 检测结果数组 * * @example * ```typescript * // 在 Worker bootstrap 完成后调用 * const results = checkClusterCompatibility(app, workerCount) * // results: [{ name: 'rate-limit-memory-store', warned: true, message: '...' }] * ``` */ export declare function checkClusterCompatibility(app: VextApp, workerCount: number): ClusterCheckResult[];