koatty_serve
Version:
Provide http1/2, websocket, gRPC server for Koatty.
2,147 lines (2,086 loc) • 56.9 kB
TypeScript
/*!
* @Author: richen
* @Date: 2025-06-17 02:25:51
* @License: BSD (3-Clause)
* @Copyright (c) - <richenlin(at)gmail.com>
* @HomePage: https://koatty.org/
*/
/// <reference types="node" />
import { ChannelOptions } from '@grpc/grpc-js';
import EventEmitter from 'events';
import { Http2SecureServer } from 'http2';
import { Http2Session } from 'http2';
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 { ServiceDefinition } from '@grpc/grpc-js';
import { Socket } from 'net';
import { TLSSocket } from 'tls';
import { UntypedHandleCall } from '@grpc/grpc-js';
import * as WS from 'ws';
import { ws } from 'ws';
/**
* Base server class with template method pattern
* 模板方法模式:定义算法骨架,子类实现具体步骤
*/
declare abstract class BaseServer<T extends BaseServerOptions = BaseServerOptions> implements KoattyServer {
options: T;
readonly server: any;
readonly protocol: string;
status: number;
listenCallback?: () => void;
constructor(app: KoattyApplication, options: T);
/**
* 模板方法:服务器初始化流程
* 定义了所有协议服务器的通用初始化步骤
*/
/**
* 模板方法:配置热更新流程
*/
updateConfig(newConfig: Partial<T>): Promise<boolean>;
/**
* 模板方法:优雅关闭流程
* 现在使用统一的 GracefulShutdownManager 来处理关闭流程
*/
gracefulShutdown(options?: GracefulShutdownOptions): Promise<ShutdownResult>;
/**
* 检测配置变更
*/
/**
* 设置连接池事件监听(公共逻辑)
*/
/**
* 设置定期清理(公共逻辑)
*/
/**
* 处理需要重启的配置变更
*/
/**
* 处理运行时配置变更
*/
/**
* 停止监控和清理(公共逻辑)
*/
/**
* 获取活跃连接数(公共逻辑)
*/
/**
* 获取连接统计信息(公共接口)
*/
getConnectionStats(): ConnectionStats;
/**
* 获取连接池健康状态(公共接口)
*/
getConnectionPoolHealth(): ConnectionPoolHealth;
/**
* 获取连接池指标(公共接口)
*/
getConnectionPoolMetrics(): ConnectionPoolMetrics;
/**
* 初始化连接池(各协议自定义)
*/
/**
* 创建协议特定的服务器实例(各协议自定义)
*/
/**
* 配置服务器选项(各协议自定义)
*/
/**
* 协议特定的额外初始化(各协议自定义,可选实现)
*/
/**
* 分析配置变更影响(各协议自定义)
*/
/**
* 运行时配置变更处理(各协议自定义)
*/
/**
* 提取相关配置用于日志(各协议自定义)
*/
/**
* 停止接受新连接(各协议自定义)
*/
/**
* 等待现有连接完成(各协议自定义)
*/
/**
* 强制关闭剩余连接(各协议自定义)
*/
/**
* 强制关闭(各协议自定义)
*/
/**
* 启动服务器
*/
abstract Start(listenCallback?: () => void): any;
/**
* 获取服务器状态
*/
abstract getStatus(): number;
/**
* 获取原生服务器实例
*/
abstract getNativeServer(): NativeServer;
/**
* 停止服务器(向后兼容)
*/
Stop(callback?: (err?: Error) => void): void;
}
/**
* Base Server Options
*
* @export
* @interface BaseServerOptions
* @extends {ListeningOptions}
*/
declare interface BaseServerOptions extends ListeningOptions {
hostname: string;
port: number;
protocol: KoattyProtocol;
trace?: boolean;
ext?: Record<string, any>;
connectionPool?: ConnectionPoolConfig;
}
/**
* 基础SSL配置
*/
declare interface BaseSSLConfig {
key?: string;
cert?: string;
ca?: string;
passphrase?: string;
ciphers?: string;
honorCipherOrder?: boolean;
secureProtocol?: string;
}
/**
* Bind event to the process
*
* @param {EventEmitter} event
* @param {string} originEventName
* @param {string} [targetEventName]
*/
export declare function BindProcessEvent(event: EventEmitter, originEventName: string, targetEventName?: processEvent): void;
/**
* Child logger with preset context
*/
declare class ChildLogger {
constructor(parent: StructuredLogger, childContext: LogContext);
debug(message: string, additionalContext?: LogContext, data?: any): void;
info(message: string, additionalContext?: LogContext, data?: any): void;
warn(message: string, additionalContext?: LogContext, data?: any): void;
error(message: string, additionalContext?: LogContext, error?: Error | any): void;
logServerEvent(event: 'starting' | 'started' | 'stopping' | 'stopped' | 'error', additionalContext?: LogContext, data?: any): void;
logConnectionEvent(event: 'connected' | 'disconnected' | 'error' | 'timeout', additionalContext?: LogContext, data?: any): void;
logSecurityEvent(event: 'auth_success' | 'auth_failure' | 'rate_limit' | 'blocked', additionalContext?: LogContext, data?: any): void;
startPerformanceTracking(trackingId: string, additionalContext?: LogContext): void;
endPerformanceTracking(trackingId: string, additionalContext?: LogContext): PerformanceMetrics | null;
}
/**
* Configuration change detection result
*/
declare interface ConfigChangeAnalysis {
requiresRestart: boolean;
changedKeys: (keyof ListeningOptions)[];
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;
maxReceiveMessageLength?: number;
maxSendMessageLength?: number;
keepAliveTime?: number;
pingInterval?: number;
pongTimeout?: number;
heartbeatInterval?: 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"
}
/**
* 连接池健康状态
*/
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(event: ConnectionPoolEvent, listener: Function): void;
/**
* Remove event listener
*/
off(event: ConnectionPoolEvent, listener: Function): void;
/**
* 辅助方法
*/
/**
* 设置统一监控
*/
/**
* Trigger event
*/
/**
* Record connection event for statistics
*/
/**
* Record request latency
*/
/**
* Destroy connection pool manager
*/
destroy(): Promise<void>;
/**
* 统一的连接获取接口 - 对外提供统一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;
}
/**
* Create terminus event
*
* @export
* @param {KoattyApplication} app
* @param {(Server | Http2SecureServer)} server
* @param {TerminusOptions} [options]
*/
export declare function CreateTerminus(app: KoattyApplication, server: KoattyServer, options?: TerminusOptions): void;
/**
* 优雅关闭管理器
* 提供统一的优雅关闭流程管理,支持多步骤关闭和详细状态跟踪
*
* 性能优化:
* - 移除不必要的 TimerManager 依赖
* - 优化日志记录频率
* - 统一超时机制
*/
declare class GracefulShutdownManager {
constructor(protocol: string);
/**
* 检查是否正在关闭中
*/
isInShutdown(): boolean;
/**
* 获取当前关闭状态
*/
getStatus(): ShutdownStatus;
/**
* 执行优雅关闭流程
* 优化:减少日志记录频率,统一错误处理
*/
performGracefulShutdown(steps: ShutdownStep[], options?: GracefulShutdownOptions): Promise<ShutdownResult>;
/**
* 执行单个关闭步骤
*/
/**
* 执行排空延迟
*/
/**
* 设置强制关闭定时器(已优化,移除不必要的实现)
*/
/**
* 带超时的执行函数
*/
/**
* 创建失败结果
*/
/**
* 清理资源
*/
/**
* 执行各个关闭步骤
*/
/**
* 执行全局超时控制
*/
}
/**
* 优雅关闭选项
*/
declare interface GracefulShutdownOptions {
timeout?: number;
drainDelay?: number;
stepTimeout?: number;
forceTimeout?: number;
steps?: ShutdownStep[];
}
/**
* 简化的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连接
*/
/**
* 清理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;
/**
* 验证gRPC连接
*/
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> {
readonly server: Server;
options: GrpcServerOptions;
constructor(app: KoattyApplication, options: GrpcServerOptions);
/**
* 初始化gRPC连接池
*/
/**
* 创建gRPC服务器实例
*/
/**
* 配置gRPC服务器选项
*/
/**
* gRPC特定的额外初始化
*/
protected extractRelevantConfig(config: GrpcServerOptions): {
hostname: string;
port: number;
protocol: KoattyProtocol;
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;
/**
* 提取连接池配置
*/
}
/**
* gRPC Server Options with enhanced configuration
*
* @export
* @interface GrpcServerOptions
* @extends {ListeningOptions}
*/
declare interface GrpcServerOptions extends BaseServerOptions {
channelOptions?: ChannelOptions;
ssl?: SSLConfig;
connectionPool?: ConnectionPoolConfig;
ext?: {
key?: string;
cert?: string;
ca?: string;
[key: string]: any;
};
}
/**
* 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> {
readonly server: 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: KoattyProtocol;
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;
ext?: {
key?: string;
cert?: string;
ca?: string;
[key: string]: any;
};
}
/**
* 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>;
/**
* 注册HTTP特定的清理任务到统一监控器
*/
/**
* 清理空闲连接
*/
/**
* 获取连接统计信息
*/
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;
}>;
/**
* 找到连接ID的辅助方法
*/
/**
* 销毁连接池
*/
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>;
/**
* 注册HTTPS特定的清理任务到统一监控器
*/
/**
* 清理空闲连接
*/
/**
* 获取连接统计信息
*/
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> {
readonly server: Server_2;
constructor(app: KoattyApplication, options: HttpServerOptions);
/**
* 初始化HTTP连接池
*/
/**
* 创建HTTP服务器实例
*/
/**
* 配置HTTP服务器选项
*/
/**
* HTTP特定的额外初始化
*/
/**
* 提取连接池配置
*/
/**
* 配置连接池设置
*/
/**
* 设置连接跟踪
*/
protected extractRelevantConfig(config: HttpServerOptions): {
hostname: string;
port: number;
protocol: KoattyProtocol;
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;
};
}
/**
* 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> {
readonly server: Server_3;
constructor(app: KoattyApplication, options: HttpsServerOptions);
/**
* 初始化HTTPS连接池
*/
/**
* 创建HTTPS服务器实例
*/
/**
* 配置HTTPS服务器选项
*/
/**
* HTTPS特定的额外初始化
*/
/**
* 创建SSL选项
*/
/**
* 自动SSL配置
*/
/**
* 手动SSL配置
*/
/**
* 双向TLS配置
*/
/**
* 加载证书文件
*/
/**
* 设置连接处理
*/
/**
* 记录请求
*/
/**
* 提取连接池配置
*/
protected extractRelevantConfig(config: HttpsServerOptions): {
hostname: string;
port: number;
protocol: KoattyProtocol;
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;
ext?: {
key?: string;
cert?: string;
ca?: string;
[key: string]: any;
};
}
/**
* Implementation
*
* @interface Implementation
*/
declare interface Implementation {
[methodName: string]: UntypedHandleCall;
}
export declare type KoattyProtocol = 'http' | "https" | 'http2' | 'grpc' | 'ws' | 'wss';
/**
* listening options
*
* @interface ListeningOptions
*/
export declare interface ListeningOptions {
hostname: string;
port: number;
protocol: KoattyProtocol | KoattyProtocol[];
trace?: boolean;
ext?: Record<string, any>;
connectionPool?: ConnectionPoolConfig;
}
/**
* 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]: any;
}
/**
* 监控统计信息
*/
declare interface MonitoringStats {
tasksExecuted: number;
tasksSuccessful: number;
tasksFailed: number;
lastExecutionTime: number;
averageExecutionTime: number;
uptime: number;
}
/**
* 监控任务接口
*/
declare interface MonitoringTask {
name: string;
interval: number;
priority: number;
execute: () => Promise<void> | void;
onError?: (error: Error) => void;
enabled?: boolean;
description?: string;
}
/**
* Multi-protocol server manager
*/
export declare class MultiProtocolServer implements KoattyServer {
readonly options: ListeningOptions;
server?: NativeServer;
constructor(app: KoattyApplication, opt: ListeningOptions);
/**
* Start all servers
*/
Start(listenCallback?: () => void): NativeServer;
/**
* Stop all servers
*/
Stop(callback?: () => void): void;
/**
* Register Service for gRPC server
*/
RegisterService(impl: (...args: any[]) => any, protocolType?: KoattyProtocol, port?: number): void;
/**
* Get status by protocol and port
* @param protocolType
* @param port
* @returns
*/
getStatus(protocolType?: KoattyProtocol, port?: number): number;
/**
* Get native server by protocol and port
* @param protocolType
* @param port
* @returns
*/
getNativeServer(protocolType?: KoattyProtocol, port?: number): NativeServer;
/**
* Get server by protocol and port
*/
getServer(protocolType?: KoattyProtocol, port?: number): KoattyServer | undefined;
/**
* Get all running servers
*/
getAllServers(): Map<string, KoattyServer>;
/**
* Get all failed servers
*/
getFailedServers(): Map<string, Error>;
/**
* Get protocols as array
*/
/**
* Create protocol servers based on configuration
*/
/**
* Create server instance based on protocol
*/
}
/**
* Create Server
*
* @export
* @param {KoattyApplication} app
* @param {ListeningOptions} [opt]
* @returns {*} {KoattyServer}
*/
export declare function NewServe(app: KoattyApplication, opt?: ListeningOptions): KoattyServer;
/**
* cleanup function, returning a promise (used to be onSigterm)
*
* @returns {*}
*/
export declare function onSignal(event: string, app: KoattyApplication, server: KoattyServer, forceTimeout: number): Promise<never>;
/**
* Performance metrics interface
*/
declare interface PerformanceMetrics {
startTime: number;
endTime?: number;
duration?: number;
memoryUsage?: NodeJS.MemoryUsage;
[key: string]: any;
}
declare type processEvent = "beforeExit" | "exit" | NodeJS.Signals;
/**
* ServiceImplementation
*
* @interface ServiceImplementation
*/
declare interface ServiceImplementation {
service: ServiceDefinition;
implementation: Implementation;
}
/**
* 优雅关闭结果
*/
declare interface ShutdownResult {
status: ShutdownStatus;
totalTime: number;
completedSteps: string[];
failedSteps: Array<{
step: string;
error: string;
timestamp: number;
}>;
}
/**
* 优雅关闭状态
*/
declare enum ShutdownStatus {
NOT_STARTED = "not_started",
IN_PROGRESS = "in_progress",
DRAINING = "draining",
COMPLETING = "completing",
COMPLETED = "completed",
FAILED = "failed",
FORCED = "forced"
}
/**
* 优雅关闭步骤接口
*/
declare interface ShutdownStep {
name: string;
description: string;
timeout?: number;
execute: (traceId: string) => Promise<void>;
isRequired?: boolean;
retryCount?: number;
}
/**
* HTTPS使用的高级SSL配置
*/
declare interface SSL1Config extends BaseSSLConfig {
mode: 'auto' | 'manual' | 'mutual_tls';
requestCert?: boolean;
rejectUnauthorized?: boolean;
}
/**
* HTTP/2使用的SSL配置(支持HTTP/1.1降级)
*/
declare interface SSL2Config extends SSL1Config {
allowHTTP1?: boolean;
}
/**
* gRPC和WebSocket使用的简单SSL配置
*/
declare interface SSLConfig extends BaseSSLConfig {
enabled: boolean;
keyFile?: string;
certFile?: string;
caFile?: string;
clientCertRequired?: boolean;
}
/**
* Structured logger class based on koatty_logger
*/
declare class StructuredLogger {
/**
* Get singleton instance
*/
static getInstance(): StructuredLogger;
/**
* Set global context for all logs
*/
setGlobalContext(context: LogContext): void;
/**
* Clear global context
*/
clearGlobalContext(): void;
/**
* Format log message with context
*/
/**
* Debug level logging
*/
debug(message: string, context?: LogContext, data?: any): void;
/**
* Info level logging
*/
info(message: string, context?: LogContext, data?: any): void;
/**
* Warning level logging
*/
warn(message: string, context?: LogContext, data?: any): void;
/**
* Error level logging
*/
error(message: string, context?: LogContext, error?: Error | any): void;
/**
* Start performance tracking
*/
startPerformanceTracking(trackingId: string, context?: LogContext): void;
/**
* End performance tracking and log results
*/
endPerformanceTracking(trackingId: string, context?: LogContext): PerformanceMetrics | null;
/**
* Log server lifecycle events
*/
logServerEvent(event: 'starting' | 'started' | 'stopping' | 'stopped' | 'error', context: LogContext, data?: any): void;
/**
* Log connection events
*/
logConnectionEvent(event: 'connected' | 'disconnected' | 'error' | 'timeout', context: LogContext, data?: any): void;
/**
* Log security events
*/
logSecurityEvent(event: 'auth_success' | 'auth_failure' | 'rate_limit' | 'blocked', context: LogContext, data?: any): void;
/**
* Create a child logger with preset context
*/
createChildLogger(childContext: LogContext): ChildLogger;
}
export declare interface TerminusOptions {
timeout: number;
signals?: string[];
onSignal?: (event: string, app: KoattyApplication, server: KoattyServer, forceTimeout: number) => Promise<any>;
}
/**
* 定时器信息接口
*/
declare interface TimerInfo {
id: string;
name: string;
interval: number;
callback: () => void;
timer: NodeJS.Timeout;
createdAt: number;
lastExecuted?: number;
priority?: 'high' | 'medium' | 'low';
protocol?: string;
}
/**
* 统一定时器管理器
* 解决定时器资源泄漏和难以追踪的问题
* Phase 3: 添加定时器优化功能
*/
declare class TimerManager {
constructor(config?: Partial<TimerOptimizerConfig>);
/**
* 添加定时器 (传统方式)
* @param name 定时器名称
* @param callback 回调函数
* @param interval 间隔时间(毫秒)
* @returns 定时器ID
*/
/**
* 添加定时器 - 统一使用优化模式
* @param name 定时器名称
* @param callback 回调函数
* @param interval 间隔时间(毫秒)
* @returns 定时器ID
*/
addTimer(name: string, callback: () => void, interval: number): string;
/**
* 添加优化定时器 - Phase 3
* @param task 定时器任务
* @returns 任务ID
*/
addOptimizedTimer(task: Omit<TimerTask, 'id' | 'lastExecuted' | 'executionCount'>): string;
/**
* 创建物理定时器 - 用于合并定时器的底层实现
*/
/**
* 清理指定定时器 - 支持逻辑定时器清理
* @param timerIdOrName 定时器ID或名称
* @returns 是否成功清理
*/
clearTimer(timerIdOrName: string): boolean;
/**
* 清理所有定时器 - 支持逻辑和物理定时器清理
*/
clearAllTimers(): void;
/**
* 获取活跃定时器数量 - 返回逻辑定时器数量
*/
getActiveTimerCount(): number;
/**
* 获取所有定时器名称 - 返回逻辑定时器名称
*/
getTimerNames(): string[];
/**
* 获取定时器详细信息
*/
getTimerInfo(timerId: string): TimerInfo | undefined;
/**
* 获取所有定时器统计信息 - 返回逻辑定时器统计
*/
getTimerStats(): {
totalTimers: number;
timers: Array<{
id: string;
name: string;
interval: number;
uptime: number;
lastExecuted?: number;
priority: string;
executionCount: number;
}>;
};
/**
* 检查是否存在指定定时器 - 支持逻辑和物理定时器
*/
hasTimer(timerId: string): boolean;
/**
* 确定定时器优先级 - Phase 3 优化
*/
/**
* 从定时器名称提取协议 - Phase 3 优化
*/
/**
* 选择最佳频率 - Phase 3 优化
*/
/**
* 优化定时器 - Phase 3 核心优化逻辑
*/
/**
* 创建合并定时器 - Phase 3 优化
*/
/**
* 执行任务批次 - Phase 3 优化
*/
/**
* 判断是否应该执行任务(自适应频率)- Phase 3 优化
*/
/**
* 更新平均执行时间 - Phase 3 优化
*/
/**
* 清理合并定时器 - Phase 3 优化
*/
/**
* 获取优化统计信息 - Phase 3 优化
*/
getOptimizationStats(): {
performance: {
totalTasks: number;
executedTasks: number;
averageExecutionTime: number;
lastOptimization: number;
};
consolidation: {
activeTimers: number;
totalTasks: number;
tasksByFrequency: {
[k: string]: number;
};
tasksByPriority: {
high: number;
medium: number;
low: number;
};
};
config: TimerOptimizerConfig;
};
/**
* 演示Phase 3优化功能 - 创建优化版本的TimerManager实例
*/
static createOptimizedInstance(): TimerManager;
/**
* 演示定时器优化效果
*/
demonstrateOptimization(): {
before: {
timerCount: number;
intervals: number[];
};
after: {
consolidatedTimers: number;
frequencies: number[];
estimatedReduction: string;
};
};
/**
* 安全销毁管理器
*/
destroy(): void;
}
/**
* 定时器优化配置
*/
declare interface TimerOptimizerConfig {
enableConsolidation: boolean;
enableAdaptiveFrequency: boolean;
maxTimersPerFrequency: number;
loadThreshold: number;
}
/**
* 定时器任务接口 - Phase 3 优化
*/
declare interface TimerTask {
id: string;
name: string;
callback: () => void;
interval: number;
priority: 'high' | 'medium' | 'low';
protocol?: string;
lastExecuted?: number;
executionCount?: number;
}
/**
* 统一连接池监控管理器
* 解决连接池监控定时器过多的问题,合并相似功能
*/
declare class UnifiedPoolMonitor {
constructor(protocol: string, monitoringInterval?: number);
/**
* 注册监控任务
*/
registerTask(task: MonitoringTask): void;
/**
* 注销监控任务
*/
unregisterTask(taskName: string): void;
/**
* 启用/禁用任务
*/
setTaskEnabled(taskName: string, enabled: boolean): void;
/**
* 开始监控
*/
startMonitoring(): void;
/**
* 停止监控
*/
stopMonitoring(): void;
/**
* 执行监控周期
*/
/**
* 获取需要执行的任务
*/
/**
* 按优先级分组任务
*/
/**
* 执行同优先级任务组
*/
/**
* 执行单个任务
*/
/**
* 计算平均执行时间
*/
/**
* 获取任务统计信息
*/
getTaskStats(taskName?: string): MonitoringStats | Map<string, MonitoringStats>;
/**
* 获取监控器状态
*/
getMonitorStatus(): {
isRunning: boolean;
uptime: number;
tasksCount: number;
enabledTasksCount: number;
totalExecutions: number;
totalSuccesses: number;
totalFailures: number;
};
/**
* 获取任务列表
*/
getTasks(): Array<{
name: string;
interval: number;
priority: number;
enabled: boolean;
description: string;
stats: MonitoringStats;
}>;
/**
* 销毁监控器
*/
destroy(): void;
}
/**
* WebSocket连接池管理器
*/
declare class WebSocketConnectionPoolManager extends ConnectionPoolManager<WS.WebSocket> {
constructor(config?: ConnectionPoolConfig);
/**
* 验证WebSocket连接
*/
/**
* 清理WebSocket连接
*/
/**
* 获取可用连接
*/
protected getAvailableConnection(): Promise<{
connection: WS.WebSocket;
id: string;
} | null>;
/**
* 创建新连接 - 支持主动创建WebSocket连接(用于客户端模式或测试)
*/
protected createNewConnection(options: ConnectionRequestOptions): Promise<{
connection: WS.WebSocket;
id: string;
metadata?: any;
} | null>;
/**
* 检查连接是否健康
*/
isConnectionHealthy(connection: WS.WebSocket): boolean;
/**
* 协议特定的连接处理器设置
*/
/**
* 协议特定的连接创建逻辑
*/
protected createProtocolConnection(_options: ConnectionRequestOptions): Promise<{
connection: WS.WebSocket;
metadata?: any;
} | null>;
/**
* 添加WebSocket连接(对外接口,使用统一的registerConnection)
*/
addWebSocketConnection(connection: WS.WebSocket, request?: IncomingMessage): Promise<boolean>;
/**
* 注册WebSocket特定的监控任务到统一监控器
*/
/**
* 向所有连接发送ping
*/
/**
* 清理死连接
*/
/**
* 清理过期连接
*/
cleanupStaleConnections(): number;
/**
* 获取连接统计信息
*/
getConnectionStats(): {
availableConnections: number;
healthyConnections: 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;
};
/**
* 找到连接ID的辅助方法
*/
/**
* 销毁连接池
*/
/**
* 重写添加连接方法,确保WebSocket连接正确设置
*/
addConnection(connection: WS.WebSocket, metadata?: any): Promise<boolean>;
destroy(): Promise<void>;
}
/**
* WebSocket Server Options extending base options
*/
declare interface WebSocketServerOptions extends BaseServerOptions {
wsOptions?: WS.ServerOptions;
ssl?: SSLConfig;
connectionPool?: ConnectionPoolConfig;
}
/**
* WebSocket Server implementation using template method pattern
* 继承BaseServer,只实现WebSocket特定的逻辑
*/
export declare class WsServer extends BaseServer<WebSocketServerOptions> {
readonly server: WS.WebSocketServer;
readonly httpServer: Server_2 | Server_3;
socket: any;
constructor(app: KoattyApplication, options: WebSocketServerOptions);
/**