UNPKG

koatty_serve

Version:

Provide http1/2/3, websocket, gRPC server for Koatty.

2,037 lines (1,990 loc) 75.3 kB
/*! * @Author: richen * @Date: 2026-04-24 16:20:39 * @License: BSD (3-Clause) * @Copyright (c) - <richenlin(at)gmail.com> * @HomePage: https://koatty.org/ */ import { ChannelOptions } from '@grpc/grpc-js'; import { Http2SecureServer } from 'http2'; import { Http2Session } from 'http2'; import { IComponent } from 'koatty_core'; import { IncomingMessage } from 'http'; import { KoattyApplication } from 'koatty_core'; import { KoattyServer } from 'koatty_core'; import { NativeServer } from 'koatty_core'; import { Server } from '@grpc/grpc-js'; import { Server as Server_2 } from 'http'; import { Server as Server_3 } from 'https'; import { ServerResponse } from 'http'; import { ServiceDefinition } from '@grpc/grpc-js'; import { Socket } from 'net'; import { TLSSocket } from 'tls'; import { UntypedHandleCall } from '@grpc/grpc-js'; import * as WS from 'ws'; /** * Base server class with template method pattern * 模板方法模式:定义算法骨架,子类实现具体步骤 * @template T - Options type extending ListeningOptions * @template S - Server instance type (defaults to any for backward compatibility) */ declare abstract class BaseServer<T extends ListeningOptions = ListeningOptions, S = any> implements KoattyServer { options: T; readonly protocol: string; status: number; listenCallback?: () => void; constructor(app: KoattyApplication, options: T); /** * 模板方法:服务器初始化流程 * 定义了所有协议服务器的通用初始化步骤 */ /** * 模板方法:配置热更新流程 */ updateConfig(newConfig: Partial<T>): Promise<boolean>; /** * 模板方法:优雅关闭流程 * 简化实现,直接执行关闭步骤 */ gracefulShutdown(options?: GracefulShutdownOptions): Promise<ShutdownResult>; /** * 执行带超时的异步操作 */ /** * 检测配置变更 */ /** * 设置连接池事件监听(公共逻辑) */ /** * 设置定期清理(公共逻辑) */ /** * 处理需要重启的配置变更 */ /** * 处理运行时配置变更 */ /** * 停止监控和清理(公共逻辑) */ /** * 获取活跃连接数(公共逻辑) */ /** * 获取连接统计信息(公共接口) */ getConnectionStats(): ConnectionStats; /** * 获取连接池健康状态(公共接口) */ getConnectionPoolHealth(): ConnectionPoolHealth; /** * 获取连接池指标(公共接口) */ getConnectionPoolMetrics(): ConnectionPoolMetrics; /** * 初始化连接池(各协议自定义) */ /** * 创建协议特定的服务器实例(各协议自定义) */ /** * 配置服务器选项(各协议自定义) */ /** * 协议特定的额外初始化(各协议自定义,可选实现) */ /** * 分析配置变更影响(各协议自定义) */ /** * 运行时配置变更处理(各协议自定义) */ /** * 提取相关配置用于日志(各协议自定义) */ /** * 停止接受新连接(各协议自定义) */ /** * 等待现有连接完成(各协议自定义) */ /** * 强制关闭剩余连接(各协议自定义) */ /** * 强制关闭(各协议自定义) */ /** * 启动服务器 */ abstract Start(listenCallback?: () => void): any; /** * 获取服务器状态 */ abstract getStatus(): number; /** * 获取原生服务器实例 */ abstract getNativeServer(): NativeServer; /** * 销毁服务器(抽象方法,各协议实现) * 内部应该调用 gracefulShutdown 进行优雅关闭 */ abstract destroy(): Promise<void>; /** * 停止服务器(向后兼容) */ Stop(callback?: (err?: Error) => void): void; } /** * Base Server Options * * @export * @interface BaseServerOptions */ declare interface BaseServerOptions { hostname: string; port: number; protocol: string; trace?: boolean; connectionPool?: ConnectionPoolConfig; health?: HealthCheckConfig; ext?: { [key: string]: unknown; }; [key: string]: unknown; } /** * 基础SSL配置 */ declare interface BaseSSLConfig { enabled?: boolean; key?: string; cert?: string; ca?: string; passphrase?: string; ciphers?: string; honorCipherOrder?: boolean; secureProtocol?: string; } /** * Configuration change detection result */ declare interface ConfigChangeAnalysis { requiresRestart: boolean; changedKeys: string[]; restartReason?: string; canApplyRuntime?: boolean; } /** * 统一连接池配置接口 */ declare interface ConnectionPoolConfig { connectionTimeout?: number; maxConnections?: number; maxSessionMemory?: number; maxHeaderListSize?: number; keepAliveTimeout?: number; headersTimeout?: number; requestTimeout?: number; pingInterval?: number; pongTimeout?: number; heartbeatInterval?: number; protocolSpecific?: { maxSessionMemory?: number; maxHeaderListSize?: number; maxIdleTimeout?: number; maxUdpPayloadSize?: number; initialMaxStreamsBidi?: number; initialMaxStreamsUni?: number; maxReceiveMessageLength?: number; maxSendMessageLength?: number; keepAliveTime?: number; pingInterval?: number; pongTimeout?: number; heartbeatInterval?: number; }; warmup?: { enabled?: boolean; initialConnections?: number; timeout?: number; retryCount?: number; }; } /** * Connection pool event types */ declare enum ConnectionPoolEvent { CONNECTION_ADDED = "connection_added", CONNECTION_REMOVED = "connection_removed", CONNECTION_TIMEOUT = "connection_timeout", CONNECTION_ERROR = "connection_error", POOL_LIMIT_REACHED = "pool_limit_reached", HEALTH_STATUS_CHANGED = "health_status_changed" } /** * Event data type mapping for type-safe event handling */ declare interface ConnectionPoolEventMap { [ConnectionPoolEvent.CONNECTION_ADDED]: { connectionId: string; }; [ConnectionPoolEvent.CONNECTION_REMOVED]: { connectionId: string; reason?: string; }; [ConnectionPoolEvent.CONNECTION_TIMEOUT]: { connectionId: string; timeout: number; }; [ConnectionPoolEvent.CONNECTION_ERROR]: { connectionId?: string; error: Error; }; [ConnectionPoolEvent.POOL_LIMIT_REACHED]: { currentConnections: number; maxConnections?: number; }; [ConnectionPoolEvent.HEALTH_STATUS_CHANGED]: { oldStatus: ConnectionPoolStatus; newStatus: ConnectionPoolStatus; health: ConnectionPoolHealth; }; } /** * 连接池健康状态 */ declare interface ConnectionPoolHealth { status: ConnectionPoolStatus; utilizationRatio: number; activeConnections: number; maxConnections: number; rejectedConnections: number; averageResponseTime: number; errorRate: number; message: string; lastUpdated: number; } /** * Abstract connection pool manager */ declare abstract class ConnectionPoolManager<T = any> { protected waitingQueue: Array<{ resolve: (result: ConnectionRequestResult<T>) => void; reject: (error: Error) => void; options: ConnectionRequestOptions; timestamp: number; }>; constructor(protocol: string, config?: ConnectionPoolConfig); /** * 初始化指标 */ /** * 初始化健康状态 */ /** * Validate and normalize configuration */ /** * 申请连接 */ requestConnection(options?: ConnectionRequestOptions): Promise<ConnectionRequestResult<T>>; /** * 释放连接 */ releaseConnection(connection: T, options?: { destroy?: boolean; error?: Error; }): Promise<boolean>; /** * Add connection to the pool */ addConnection(connection: T, metadata?: any): Promise<boolean>; /** * Remove connection from pool */ removeConnection(connection: T, reason?: string): Promise<void>; /** * Get active connection count */ getActiveConnectionCount(): number; /** * Check if the connection is healthy */ abstract isConnectionHealthy(connection: T): boolean; /** * Close all connections */ closeAllConnections(timeout?: number): Promise<void>; /** * Protocol-specific connection validation */ /** * Protocol-specific connection cleanup */ /** * 获取可用连接 */ protected abstract getAvailableConnection(): Promise<{ connection: T; id: string; } | null>; /** * 创建新连接 */ protected createNewConnection(options: ConnectionRequestOptions): Promise<{ connection: T; id: string; metadata?: any; } | null>; /** * Check if new connections can be accepted */ canAcceptConnection(): boolean; /** * Update connection pool health status */ updateHealthStatus(): void; /** * Get connection pool health status */ getHealth(): ConnectionPoolHealth; /** * Get connection pool metrics */ getMetrics(): ConnectionPoolMetrics; /** * Get connection pool configuration */ getConfig(): Readonly<ConnectionPoolConfig>; /** * Update connection pool configuration */ updateConfig(newConfig: Partial<ConnectionPoolConfig>): Promise<boolean>; /** * Add event listener */ on<E extends ConnectionPoolEvent>(event: E, listener: (data: ConnectionPoolEventMap[E]) => void): void; /** * Remove event listener */ off<E extends ConnectionPoolEvent>(event: E, listener: (data: ConnectionPoolEventMap[E]) => void): void; /** * 辅助方法 */ /** * Trigger event with enhanced error handling */ /** * Record connection event for statistics */ /** * Record request latency */ /** * Destroy connection pool manager */ destroy(): Promise<void>; /** * Warm up connection pool with initial connections * Creates connections before they are needed to reduce latency * @param count Number of connections to warm up (default: from config) * @param options Warmup options * @returns Warmup result */ warmup(count?: number, options?: { timeout?: number; retryCount?: number; }): Promise<{ success: boolean; created: number; failed: number; duration: number; errors: Error[]; }>; /** * Create a single warmup connection with retry logic */ /** * 统一的连接获取接口 - 对外提供统一API */ getConnection(options?: ConnectionRequestOptions): Promise<ConnectionRequestResult<T>>; /** * 统一的连接添加接口 - 协议无关的连接注册 * 各协议通过此方法注册新连接到池中 */ registerConnection(connection: T, metadata?: any): Promise<boolean>; /** * 协议特定的连接处理器设置 - 子类实现 */ /** * 协议特定的连接创建逻辑 - 子类实现 */ protected abstract createProtocolConnection(options: ConnectionRequestOptions): Promise<{ connection: T; metadata?: any; } | null>; } /** * 连接池指标 */ declare interface ConnectionPoolMetrics extends ConnectionStats { protocol: string; poolConfig: ConnectionPoolConfig; health: ConnectionPoolHealth; performance: { throughput: number; latency: { p50: number; p95: number; p99: number; }; memoryUsage: number; cpuUsage: number; }; uptime: number; } /** * 连接池状态枚举 */ declare enum ConnectionPoolStatus { HEALTHY = "healthy", DEGRADED = "degraded", OVERLOADED = "overloaded", UNAVAILABLE = "unavailable" } /** * 连接申请选项 */ declare interface ConnectionRequestOptions { timeout?: number; priority?: 'low' | 'normal' | 'high'; metadata?: Record<string, any>; } /** * 连接申请结果 */ declare interface ConnectionRequestResult<T> { connection: T | null; success: boolean; error?: Error; waitTime: number; connectionId?: string; } /** * 连接统计信息接口 */ declare interface ConnectionStats { activeConnections: number; totalConnections: number; connectionsPerSecond: number; averageLatency: number; errorRate: number; } export declare function createHealthCheckMiddleware(config?: HealthCheckConfig): (req: IncomingMessage, res: ServerResponse, next: () => Promise<void>) => Promise<void>; export declare function createRateLimitMiddleware(options?: RateLimitOptions): (req: IncomingMessage, res: ServerResponse, next: () => Promise<void>) => Promise<void>; /** * Dynamic Ring Buffer (Auto-resizing Circular Buffer) * 动态环形缓冲区 - 支持自动扩容和缩容 * * Features: * - O(1) write operations (no array shifts or slices) * - O(1) amortized read operations * - Dynamic capacity adjustment based on usage * - Memory-efficient with upper and lower bounds * - Automatic overwrite of oldest data when full * * Use cases: * - High-frequency metrics collection * - Adaptive performance monitoring * - Memory-constrained environments */ export declare class DynamicRingBuffer<T = number> { /** * Create a dynamic ring buffer with auto-resize capability * @param initialCapacity Starting capacity * @param options Configuration options */ constructor(initialCapacity: number, options?: { maxCapacity?: number; minCapacity?: number; autoResize?: boolean; resizeThreshold?: number; shrinkThreshold?: number; resizeFactor?: number; resizeCooldown?: number; }); /** * Add an item to buffer with auto-resize * If buffer is full, triggers resize or overwrites oldest item * @param item Item to add */ push(item: T): void; /** * Check if buffer should expand */ /** * Check if buffer should shrink */ /** * Expand buffer capacity */ /** * Shrink buffer capacity */ /** * Get all items in insertion order (oldest to newest) * @returns Array of items */ toArray(): T[]; /** * Get a sorted copy of buffer contents * @param compareFn Optional comparison function * @returns Sorted array */ toSortedArray(compareFn?: (a: T, b: T) => number): T[]; /** * Clear all items from buffer */ clear(): void; /** * Get number of items currently in buffer * @returns Current item count */ get length(): number; /** * Get current capacity of buffer * @returns Current capacity */ get size(): number; /** * Get initial capacity * @returns Initial capacity */ get initialSize(): number; /** * Get maximum capacity * @returns Maximum capacity */ get maxSize(): number; /** * Get minimum capacity * @returns Minimum capacity */ get minSize(): number; /** * Check if buffer is empty * @returns True if empty */ isEmpty(): boolean; /** * Check if buffer is full * @returns True if full */ isFull(): boolean; /** * Get utilization ratio (0-1) * @returns Utilization ratio */ get utilization(): number; /** * Get an item at a specific index (0 = oldest, length-1 = newest) * @param index Index to retrieve * @returns Item at index or undefined if out of range */ get(index: number): T | undefined; /** * Get oldest item without removing it * @returns Oldest item or undefined if buffer is empty */ peek(): T | undefined; /** * Get newest item * @returns Newest item or undefined if buffer is empty */ peekLast(): T | undefined; /** * Calculate percentile from buffer contents (e.g., 0.5 for median, 0.95 for P95) * @param percentile Percentile value between 0 and 1 * @returns Percentile value or undefined if buffer is empty */ getPercentile(percentile: number): T | undefined; /** * Get average of numeric buffer contents * @returns Average value or undefined if buffer is empty */ getAverage(): number | undefined; /** * Iterate over buffer contents (oldest to newest) * @param callback Function to call for each item */ forEach(callback: (item: T, index: number) => void): void; /** * Map buffer contents to a new array * @param callback Function to transform each item * @returns New array of transformed items */ map<U>(callback: (item: T, index: number) => U): U[]; /** * Filter buffer contents * @param predicate Function to test each item * @returns New array of items that pass test */ filter(predicate: (item: T, index: number) => boolean): T[]; /** * Reduce buffer contents to a single value * @param callback Reducer function * @param initialValue Initial value for accumulator * @returns Reduced value */ reduce<U>(callback: (accumulator: U, item: T, index: number) => U, initialValue: U): U; /** * Manually trigger resize up * @param factor Optional resize factor override */ resizeUpManual(factor?: number): void; /** * Manually trigger resize down * @param factor Optional resize factor override */ resizeDownManual(factor?: number): void; /** * Get resize statistics */ getStats(): { resizeCount: number; lastResizeTime: number; currentCapacity: number; utilization: number; resizeThreshold: number; shrinkThreshold: number; }; } declare interface GracefulShutdownOptions { timeout?: number; drainDelay?: number; stepTimeout?: number; } /** * 简化的gRPC连接接口 */ declare interface GrpcConnection { id: string; peer: string; metadata: any; cancelled: boolean; deadline?: Date; [key: string]: any; } /** * gRPC连接池管理器 */ declare class GrpcConnectionPoolManager extends ConnectionPoolManager<GrpcConnection> { constructor(config?: ConnectionPoolConfig); /** * 验证gRPC连接 */ /** * 清理gRPC连接 */ /** * 获取可用连接 */ protected getAvailableConnection(): Promise<{ connection: GrpcConnection; id: string; } | null>; /** * 检查连接是否健康 */ isConnectionHealthy(connection: GrpcConnection): boolean; /** * 添加gRPC连接(由服务器调用) */ addGrpcConnection(peer: string, callMetadata?: any): Promise<boolean>; /** * 设置连接事件处理器 */ /** * 处理gRPC调用完成 */ handleCallComplete(connection: GrpcConnection, success: boolean): Promise<void>; /** * 更新调用指标 */ /** * 判断是否为一元调用 */ /** * 处理流响应发送 */ handleStreamResponse(connection: GrpcConnection, data: any): Promise<void>; /** * 清理过期连接 */ /** * 获取连接统计信息 */ getConnectionStats(): { grpcSpecific: { totalCalls: number; totalErrors: number; totalStreams: number; activeStreams: number; totalBytesReceived: number; totalBytesSent: number; errorRate: number; callMetrics: { totalUnarycalls: number; totalStreamingCalls: number; totalErrors: number; averageCallDuration: number; activeStreams: number; }; }; protocol: string; poolConfig: ConnectionPoolConfig; health: ConnectionPoolHealth; performance: { throughput: number; latency: { p50: number; p95: number; p99: number; }; memoryUsage: number; cpuUsage: number; }; uptime: number; activeConnections: number; totalConnections: number; connectionsPerSecond: number; averageLatency: number; errorRate: number; }; /** * 获取gRPC特定指标 */ getGrpcMetrics(): { connections: { id: any; peer: any; callCount: any; errorCount: any; streamCount: any; activeStreams: any; totalBytesReceived: any; totalBytesSent: any; age: number; idle: number; }[]; totalUnarycalls: number; totalStreamingCalls: number; totalErrors: number; averageCallDuration: number; activeStreams: number; }; /** * 找到连接ID的辅助方法 */ /** * 创建连接ID */ /** * 销毁连接池 */ destroy(): Promise<void>; /** * 协议特定的连接处理器设置 */ /** * 协议特定的连接创建逻辑 */ protected createProtocolConnection(_options: ConnectionRequestOptions): Promise<{ connection: GrpcConnection; metadata?: any; } | null>; } export declare class GrpcServer extends BaseServer<GrpcServerOptions, Server> { options: GrpcServerOptions; constructor(app: KoattyApplication, options: GrpcServerOptions); /** * 初始化gRPC连接池 */ /** * 创建gRPC服务器实例 */ /** * 配置gRPC服务器选项 */ /** * gRPC特定的额外初始化 */ protected extractRelevantConfig(config: GrpcServerOptions): { hostname: string; port: number; protocol: string; sslEnabled: boolean; connectionPool: { maxConnections: number; keepAliveTime: number; keepAliveTimeout: number; }; }; /** * Create SSL credentials from configuration * @private */ /** * Start Server with enhanced connection management */ Start(listenCallback?: () => void): NativeServer; /** * Start connection monitoring and statistics collection * @private */ /** * Register Service with enhanced logging and monitoring */ RegisterService(impl: ServiceImplementation): void; /** * Get connection statistics */ getConnectionStats(): ConnectionStats; /** * Get connection pool health */ getConnectionPoolHealth(): ConnectionPoolHealth; /** * Get connection pool metrics */ getConnectionPoolMetrics(): ConnectionPoolMetrics; /** * Get status */ getStatus(): number; /** * Get native server */ getNativeServer(): NativeServer; /** * 销毁服务器 */ destroy(): Promise<void>; } /** * gRPC Server Options with enhanced configuration */ declare interface GrpcServerOptions extends BaseServerOptions { channelOptions?: ChannelOptions; ssl?: SSLConfig; connectionPool?: ConnectionPoolConfig; } export declare interface HealthCheckConfig { enabled?: boolean; path?: string; readiness?: string; detailed?: boolean; memoryThresholdMB?: number; } export declare class HealthCheckMiddleware { constructor(config?: HealthCheckConfig); middleware(): (req: IncomingMessage, res: ServerResponse, next: () => Promise<void>) => Promise<void>; } export declare interface HealthCheckResponse { status: 'ok' | 'error'; uptime: number; timestamp: string; details?: { memory?: NodeJS.MemoryUsage; cpu?: NodeJS.CpuUsage; }; } /** * HTTP/2连接池管理器 */ declare class Http2ConnectionPoolManager extends ConnectionPoolManager<Http2Session> { constructor(config?: ConnectionPoolConfig); /** * 验证HTTP/2会话 */ /** * 清理HTTP/2会话 */ /** * 获取可用会话 */ protected getAvailableConnection(): Promise<{ connection: Http2Session; id: string; } | null>; /** * 创建新连接 - HTTP/2会话通常是被动接受的 */ protected createNewConnection(_options: ConnectionRequestOptions): Promise<{ connection: Http2Session; id: string; metadata?: any; } | null>; /** * 检查会话是否健康 */ isConnectionHealthy(session: Http2Session): boolean; /** * 添加HTTP/2会话(由服务器调用) */ addHttp2Session(session: Http2Session): Promise<boolean>; /** * 设置会话事件处理器 */ /** * 处理新流 */ /** * 启动会话ping(保留在TimerManager中,因为是动态创建的) */ /** * 启动HTTP/2监控任务 */ /** * 向所有会话发送ping */ /** * 执行健康检查 */ /** * 获取会话统计信息 */ getConnectionStats(): { availableSessions: number; goingAwaySessions: number; totalActiveStreams: number; totalStreams: number; totalStreamErrors: number; averageStreamsPerSession: number; utilizationRatio: number; protocol: string; poolConfig: ConnectionPoolConfig; health: ConnectionPoolHealth; performance: { throughput: number; latency: { p50: number; p95: number; p99: number; }; memoryUsage: number; cpuUsage: number; }; uptime: number; activeConnections: number; totalConnections: number; connectionsPerSecond: number; averageLatency: number; errorRate: number; }; /** * 获取会话详细信息 */ getSessionDetails(): Array<{ id: string; remoteAddress: string; protocol: string; activeStreams: number; totalStreams: number; streamErrors: number; maxConcurrentStreams: number; isGoingAway: boolean; age: number; idle: number; }>; /** * 优雅关闭会话 */ gracefulCloseSession(session: Http2Session, timeout?: number): Promise<void>; /** * 找到会话ID的辅助方法 */ /** * 销毁连接池 */ destroy(): Promise<void>; /** * 设置协议特定的连接处理器 */ /** * 协议特定的连接创建逻辑 */ protected createProtocolConnection(_options: ConnectionRequestOptions): Promise<{ connection: Http2Session; metadata?: any; } | null>; } /** * HTTP/2 Server implementation using template method pattern * 继承BaseServer,只实现HTTP/2特定的逻辑 */ export declare class Http2Server extends BaseServer<Http2ServerOptions, Http2SecureServer> { constructor(app: KoattyApplication, options: Http2ServerOptions); /** * 初始化HTTP/2连接池 */ /** * 创建HTTP/2服务器实例 */ /** * 配置HTTP/2服务器选项 */ /** * HTTP/2特定的额外初始化 */ /** * 创建HTTP/2选项 */ /** * 创建SSL选项 */ /** * 自动SSL配置 */ /** * 手动SSL配置 */ /** * 双向TLS配置 */ /** * 设置会话处理 */ protected extractRelevantConfig(config: Http2ServerOptions): { hostname: string; port: number; protocol: string; sslMode: "auto" | "manual" | "mutual_tls"; allowHTTP1: boolean; connectionPool: { maxConnections: number; maxSessionMemory: number; maxHeaderListSize: number; }; http2Settings: { headerTableSize?: number; enablePush?: boolean; maxConcurrentStreams?: number; initialWindowSize?: number; maxFrameSize?: number; maxHeaderListSize?: number; }; }; /** * 检查SSL配置是否变更 */ /** * 检查HTTP/2配置是否变更 */ /** * 检查连接池配置是否变更 */ /** * 重写停止监控和清理方法以处理HTTP/2特定的监控间隔 */ Start(listenCallback?: () => void): NativeServer; getStatus(): number; getNativeServer(): NativeServer; /** * 启动连接池监控 */ /** * 获取HTTP/2统计信息 */ getHttp2Stats(): { availableSessions: number; goingAwaySessions: number; totalActiveStreams: number; totalStreams: number; totalStreamErrors: number; averageStreamsPerSession: number; utilizationRatio: number; protocol: string; poolConfig: ConnectionPoolConfig; health: ConnectionPoolHealth; performance: { throughput: number; latency: { p50: number; p95: number; p99: number; }; memoryUsage: number; cpuUsage: number; }; uptime: number; activeConnections: number; totalConnections: number; connectionsPerSecond: number; averageLatency: number; errorRate: number; }; /** * 获取当前连接状态 */ getConnectionsStatus(): { current: number; max: number; }; /** * 销毁服务器 */ destroy(): Promise<void>; } /** * Enhanced HTTP/2 Server Options */ declare interface Http2ServerOptions extends BaseServerOptions { ssl?: SSL2Config; http2?: { maxHeaderListSize?: number; maxSessionMemory?: number; settings?: { headerTableSize?: number; enablePush?: boolean; maxConcurrentStreams?: number; initialWindowSize?: number; maxFrameSize?: number; maxHeaderListSize?: number; }; }; connectionPool?: ConnectionPoolConfig; } /** * HTTP/3连接池管理器 */ declare class Http3ConnectionPoolManager extends ConnectionPoolManager<Http3Session> { constructor(config?: ConnectionPoolConfig); /** * 验证HTTP/3会话 */ /** * 清理HTTP/3会话 */ /** * 获取可用会话 */ protected getAvailableConnection(): Promise<{ connection: Http3Session; id: string; } | null>; /** * 创建新连接 - HTTP/3会话通常是被动接受的 */ protected createNewConnection(_options: ConnectionRequestOptions): Promise<{ connection: Http3Session; id: string; metadata?: any; } | null>; /** * 检查会话是否健康 */ isConnectionHealthy(session: Http3Session): boolean; /** * 添加HTTP/3会话(由服务器调用) */ addHttp3Session(session: Http3Session): Promise<boolean>; /** * 设置会话事件处理器 */ /** * 处理新流 */ /** * 启动会话ping */ /** * 启动HTTP/3监控任务 */ /** * 向所有会话发送ping */ /** * 执行健康检查 */ /** * 更新会话统计信息(从 QUIC 库获取) */ updateSessionStats(session: Http3Session, sessionId: string): void; /** * 获取会话统计信息 */ getConnectionStats(): { availableSessions: number; closingSessions: number; totalActiveStreams: number; totalStreams: number; totalStreamErrors: number; totalBytesSent: number; totalBytesReceived: number; totalPacketsLost: number; averageRtt: number; averageStreamsPerSession: number; utilizationRatio: number; packetLossRate: number; protocol: string; poolConfig: ConnectionPoolConfig; health: ConnectionPoolHealth; performance: { throughput: number; latency: { p50: number; p95: number; p99: number; }; memoryUsage: number; cpuUsage: number; }; uptime: number; activeConnections: number; totalConnections: number; connectionsPerSecond: number; averageLatency: number; errorRate: number; }; /** * 获取会话详细信息 */ getSessionDetails(): Array<{ id: string; remoteAddress: string; protocol: string; activeStreams: number; totalStreams: number; streamErrors: number; maxConcurrentStreams: number; isClosing: boolean; bytesSent: number; bytesReceived: number; packetsLost: number; rtt: number; age: number; idle: number; }>; /** * 优雅关闭会话 */ gracefulCloseSession(session: Http3Session, timeout?: number): Promise<void>; /** * 找到会话ID的辅助方法 */ /** * 销毁连接池 */ destroy(): Promise<void>; /** * 设置协议特定的连接处理器 */ /** * 协议特定的连接创建逻辑 */ protected createProtocolConnection(_options: ConnectionRequestOptions): Promise<{ connection: Http3Session; metadata?: any; } | null>; } /** * HTTP/3 Server implementation using template method pattern * 继承BaseServer,只实现HTTP/3特定的逻辑 */ export declare class Http3Server extends BaseServer<Http3ServerOptions, any> { constructor(app: KoattyApplication, options: Http3ServerOptions); /** * 初始化HTTP/3连接池 */ /** * 创建HTTP/3服务器实例(使用 @matrixai/quic) * 注意:@matrixai/quic 是 ESM 模块,需要异步加载 * 实际的可用性检查将在 Http3ServerAdapter.listen() 中进行 */ /** * 设置 HTTP/3 服务器的事件处理器 */ /** * 解析文件路径 * HTTP/3 adapter 需要文件路径,如果是证书内容则需要写入临时文件 */ /** * 配置HTTP/3服务器选项 */ /** * HTTP/3特定的额外初始化 */ /** * 创建SSL选项 */ /** * 自动SSL配置 */ /** * 手动SSL配置 */ /** * 双向TLS配置 */ /** * 设置会话处理 * * 注意:实际实现取决于使用的 QUIC 库的 API */ /** * 设置流处理 * * 注意:HTTP/3 中每个请求对应一个双向流 */ protected extractRelevantConfig(config: Http3ServerOptions): { hostname: string; port: number; protocol: string; sslMode: "auto" | "manual" | "mutual_tls"; alpnProtocols: string[]; connectionPool: { maxConnections: number; maxIdleTimeout: number; }; quicSettings: { maxIdleTimeout?: number; maxUdpPayloadSize?: number; initialMaxData?: number; initialMaxStreamDataBidiLocal?: number; initialMaxStreamDataBidiRemote?: number; initialMaxStreamDataUni?: number; initialMaxStreamsBidi?: number; initialMaxStreamsUni?: number; ackDelayExponent?: number; maxAckDelay?: number; disableActiveMigration?: boolean; }; http3Settings: { maxHeaderListSize?: number; maxFieldSectionSize?: number; qpackMaxTableCapacity?: number; qpackBlockedStreams?: number; settings?: { maxHeaderListSize?: number; qpackMaxTableCapacity?: number; qpackBlockedStreams?: number; }; }; }; /** * 检查SSL配置是否变更 */ /** * 检查QUIC配置是否变更 */ /** * 检查HTTP/3配置是否变更 */ /** * 检查连接池配置是否变更 */ /** * 重写停止监控和清理方法 */ Start(listenCallback?: () => void): NativeServer; getStatus(): number; getNativeServer(): NativeServer; /** * 启动连接池监控 */ /** * 获取HTTP/3统计信息 */ getHttp3Stats(): { availableSessions: number; closingSessions: number; totalActiveStreams: number; totalStreams: number; totalStreamErrors: number; totalBytesSent: number; totalBytesReceived: number; totalPacketsLost: number; averageRtt: number; averageStreamsPerSession: number; utilizationRatio: number; packetLossRate: number; protocol: string; poolConfig: ConnectionPoolConfig; health: ConnectionPoolHealth; performance: { throughput: number; latency: { p50: number; p95: number; p99: number; }; memoryUsage: number; cpuUsage: number; }; uptime: number; activeConnections: number; totalConnections: number; connectionsPerSecond: number; averageLatency: number; errorRate: number; }; /** * 获取当前连接状态 */ getConnectionsStatus(): { current: number; max: number; }; /** * 销毁服务器 */ destroy(): Promise<void>; } /** * HTTP/3 Server Options (QUIC-based) */ declare interface Http3ServerOptions extends BaseServerOptions { ssl?: SSL3Config; http3?: { maxHeaderListSize?: number; maxFieldSectionSize?: number; qpackMaxTableCapacity?: number; qpackBlockedStreams?: number; settings?: { maxHeaderListSize?: number; qpackMaxTableCapacity?: number; qpackBlockedStreams?: number; }; }; quic?: { maxIdleTimeout?: number; maxUdpPayloadSize?: number; initialMaxData?: number; initialMaxStreamDataBidiLocal?: number; initialMaxStreamDataBidiRemote?: number; initialMaxStreamDataUni?: number; initialMaxStreamsBidi?: number; initialMaxStreamsUni?: number; ackDelayExponent?: number; maxAckDelay?: number; disableActiveMigration?: boolean; }; connectionPool?: ConnectionPoolConfig; } /** * HTTP/3 连接(Session)接口 * * 注意:这是一个抽象接口,实际实现取决于使用的 QUIC 库 * 例如:@node-rs/quic 的 Connection 对象 */ declare interface Http3Session { destroyed: boolean; closed: boolean; localAddress?: string; localPort?: number; remoteAddress?: string; remotePort?: number; close(code?: number, reason?: string): void; ping?(callback: (err: Error | null, duration: number) => void): void; getStats?(): { bytesSent: number; bytesReceived: number; packetsLost: number; rtt: number; }; on(event: 'close', listener: () => void): this; on(event: 'error', listener: (error: Error) => void): this; on(event: 'stream', listener: (stream: any) => void): this; on(event: string, listener: (...args: any[]) => void): this; once(event: 'close', listener: () => void): this; once(event: 'error', listener: (error: Error) => void): this; once(event: string, listener: (...args: any[]) => void): this; } /** * HTTP连接池管理器 */ declare class HttpConnectionPoolManager extends ConnectionPoolManager<Socket> { constructor(config?: ConnectionPoolConfig); /** * 验证HTTP连接 */ /** * 清理HTTP连接 */ /** * 获取可用连接 */ protected getAvailableConnection(): Promise<{ connection: Socket; id: string; } | null>; /** * 创建新连接 */ protected createNewConnection(_options: ConnectionRequestOptions): Promise<{ connection: Socket; id: string; metadata?: any; } | null>; /** * 检查连接是否健康 */ isConnectionHealthy(connection: Socket): boolean; /** * 添加HTTP连接(由服务器调用) */ addHttpConnection(connection: Socket): Promise<boolean>; /** * 处理HTTP请求完成 */ handleRequestComplete(connection: Socket, bytesSent?: number): Promise<void>; /** * 获取连接统计信息 */ getConnectionStats(): { availableConnections: number; totalRequests: number; totalBytesSent: number; totalBytesReceived: number; httpsConnections: number; httpConnections: number; averageRequestsPerConnection: number; utilizationRatio: number; protocol: string; poolConfig: ConnectionPoolConfig; health: ConnectionPoolHealth; performance: { throughput: number; latency: { p50: number; p95: number; p99: number; }; memoryUsage: number; cpuUsage: number; }; uptime: number; activeConnections: number; totalConnections: number; connectionsPerSecond: number; averageLatency: number; errorRate: number; }; /** * 设置Keep-Alive超时 */ setKeepAliveTimeout(timeout: number): void; /** * 获取连接详细信息 */ getConnectionDetails(): Array<{ id: string; remoteAddress: string; protocol: string; requestCount: number; bytesSent: number; bytesReceived: number; age: number; idle: number; }>; /** * 销毁连接池 */ destroy(): Promise<void>; /** * 协议特定的连接处理器设置 */ /** * 协议特定的连接创建逻辑 */ protected createProtocolConnection(_options: ConnectionRequestOptions): Promise<{ connection: Socket; metadata?: any; } | null>; } /** * HTTPS连接池管理器 */ declare class HttpsConnectionPoolManager extends ConnectionPoolManager<TLSSocket> { constructor(config?: ConnectionPoolConfig); /** * 验证HTTPS连接 */ /** * 清理HTTPS连接 */ /** * 获取可用连接 */ protected getAvailableConnection(): Promise<{ connection: TLSSocket; id: string; } | null>; /** * 创建新连接 */ protected createNewConnection(_options: ConnectionRequestOptions): Promise<{ connection: TLSSocket; id: string; metadata?: any; } | null>; /** * 检查连接是否健康 */ isConnectionHealthy(connection: TLSSocket): boolean; /** * 添加HTTPS连接(由服务器调用) */ addHttpsConnection(connection: TLSSocket): Promise<boolean>; /** * 计算连接安全评分 */ /** * 更新安全指标 */ /** * 设置连接事件处理器 */ /** * 处理HTTPS请求完成 */ handleRequestComplete(connection: TLSSocket, bytesSent?: number): Promise<void>; /** * 启动安全监控 */ /** * 获取连接统计信息 */ getConnectionStats(): { security: { totalHandshakes: number; successfulHandshakes: number; failedHandshakes: number; averageHandshakeTime: number; }; total: number; active: number; available: number; authorized: number; unauthorized: number; totalRequests: number; totalBytesSent: number; totalBytesReceived: number; averageSecurityScore: number; protocols: Record<string, number>; ciphers: Record<string, number>; }; /** * 获取安全指标 */ getSecurityMetrics(): { connectionSecurityScores: { id: any; securityScore: any; authorized: any; cipher: any; protocol: any; }[]; totalHandshakes: number; successfulHandshakes: number; failedHandshakes: number; averageHandshakeTime: number; }; /** * 设置Keep-Alive超时 */ setKeepAliveTimeout(timeout: number): void; /** * 获取连接详情 */ getConnectionDetails(): Array<{ id: string; remoteAddress: string; protocol: string; cipher: string; authorized: boolean; securityScore: number; requestCount: number; bytesSent: number; bytesReceived: number; age: number; idle: number; }>; /** * 查找HTTPS连接ID */ /** * 销毁连接池 */ destroy(): Promise<void>; /** * 设置协议特定的连接处理器 */ /** * 协议特定的连接创建逻辑 */ protected createProtocolConnection(_options: ConnectionRequestOptions): Promise<{ connection: TLSSocket; metadata?: any; } | null>; } /** * HTTP Server implementation using template method pattern * 继承BaseServer,只实现HTTP特定的逻辑 */ export declare class HttpServer extends BaseServer<HttpServerOptions, Server_2> { constructor(app: KoattyApplication, options: HttpServerOptions); /** * 初始化HTTP连接池 */ /** * 创建HTTP服务器实例 */ /** * 配置HTTP服务器选项 */ /** * HTTP特定的额外初始化 */ /** * 配置连接池设置 */ /** * 设置连接跟踪 */ protected extractRelevantConfig(config: HttpServerOptions): { hostname: string; port: number; protocol: string; connectionPool: { maxConnections: number; keepAliveTimeout: number; headersTimeout: number; requestTimeout: number; }; }; /** * 检查连接池配置是否变更 */ Start(listenCallback?: () => void): NativeServer; getStatus(): number; getNativeServer(): NativeServer; /** * 启动连接池监控 */ /** * 获取HTTP连接统计信息 */ getHttpConnectionStats(): { availableConnections: number; totalRequests: number; totalBytesSent: number; totalBytesReceived: number; httpsConnections: number; httpConnections: number; averageRequestsPerConnection: number; utilizationRatio: number; protocol: string; poolConfig: ConnectionPoolConfig; health: ConnectionPoolHealth; performance: { throughput: number; latency: { p50: number; p95: number; p99: number; }; memoryUsage: number; cpuUsage: number; }; uptime: number; activeConnections: number; totalConnections: number; connectionsPerSecond: number; averageLatency: number; errorRate: number; }; /** * 销毁服务器 */ destroy(): Promise<void>; } /** * HTTP Server Options extending base options */ declare interface HttpServerOptions extends BaseServerOptions { connectionPool?: ConnectionPoolConfig; } /** * HTTPS Server implementation using template method pattern * 继承BaseServer,只实现HTTPS特定的逻辑 */ export declare class HttpsServer extends BaseServer<HttpsServerOptions, Server_3> { constructor(app: KoattyApplication, options: HttpsServerOptions); /** * 初始化HTTPS连接池 */ /** * 创建HTTPS服务器实例 */ /** * 配置HTTPS服务器选项 */ /** * HTTPS特定的额外初始化 */ /** * 创建SSL选项 */ /** * 自动SSL配置 */ /** * 手动SSL配置 */ /** * 双向TLS配置 */ /** * 设置连接处理 */ /** * 记录请求 TODO */ protected extractRelevantConfig(config: HttpsServerOptions): { hostname: string; port: number; protocol: string; sslMode: "auto" | "manual" | "mutual_tls"; connectionPool: { maxConnections: number; keepAliveTimeout: number; headersTimeout: number; requestTimeout: number; }; }; /** * 检查SSL配置是否变更 */ /** * 检查连接池配置是否变更 */ Start(listenCallback?: () => void): NativeServer; getStatus(): number; getNativeServer(): NativeServer; /** * 启动连接池监控 */ /** * 获取安全统计信息 */ getSecurityMetrics(): { sslMode: "auto" | "manual" | "mutual_tls"; ciphers: string; secureProtocol: string; mutualTLS: boolean; }; /** * 获取当前连接状态 */ getConnectionsStatus(): { current: number; max: number; }; /** * 销毁服务器 */ destroy(): Promise<void>; } /** * Enhanced HTTPS Server Options */ declare interface HttpsServerOptions extends BaseServerOptions { ssl?: SSL1Config; connectionPool?: ConnectionPoolConfig; } /** * Implementation * * @interface Implementation */ declare interface Implementation { [methodName: string]: UntypedHandleCall; } export declare type KoattyProtocol = 'http' | "https" | 'http2' | 'http3' | 'grpc' | 'ws' | 'wss'; /** * listening options * * @interface ListeningOptions */ export declare interface ListeningOptions { hostname: string; port: number; protocol: string; trace?: boolean; ssl?: { [key: string]: unknown; } & BaseSSLConfig; ext?: { protoFile?: string; schemaFile?: string; [key: string]: unknown; }; connectionPool?: ConnectionPoolConfig; [key: string]: unknown; } /** * Log context interface */ declare interface LogContext { module?: string; protocol?: string; serverId?: string; connectionId?: string; requestId?: string; userId?: string; sessionId?: string; traceId?: string; action?: string; [key: string]: unknown; } /** * Create Server * * @export * @param {KoattyApplication} app * @param {ListeningOptions} [opt] * @returns {*} {KoattyServer} */ export declare function NewServe(app: KoattyApplication, opt?: ListeningOptions): KoattyServer; /** * Performance metrics interface */ declare interface PerformanceMetrics { startTime: number; endTime?: number; duration?: number; memoryUsage?: NodeJS.MemoryUsage; [key: string]: unknown; } export declare interface RateLimitOptions { enabled?: boolean; windowMs?: number; max?: number; keyGenerator?: (req: IncomingMessage) => string; message?: string; skipSuccessfulRequests?: boolean; } export declare interface ReadinessResponse { status: 'ready' | 'not_ready'; checks?: Record<string, boolean>; timestamp: string; } /** * Register connection pool metrics callback with Application instance * * @param