103 lines
2.4 KiB
JavaScript
103 lines
2.4 KiB
JavaScript
|
|
const logger = require("./logger");
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 服务器优化配置
|
|||
|
|
*/
|
|||
|
|
const serverConfig = {
|
|||
|
|
// 超时设置
|
|||
|
|
timeout: 30000, // 30秒
|
|||
|
|
|
|||
|
|
// 请求体大小限制
|
|||
|
|
bodyLimit: '10mb',
|
|||
|
|
|
|||
|
|
// 并发连接数限制
|
|||
|
|
maxConnections: 1000,
|
|||
|
|
|
|||
|
|
// Keep-alive 超时
|
|||
|
|
keepAliveTimeout: 5000,
|
|||
|
|
|
|||
|
|
// Headers 超时
|
|||
|
|
headersTimeout: 60000,
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 设置服务器优化参数
|
|||
|
|
* @param {Object} server - Express服务器实例
|
|||
|
|
*/
|
|||
|
|
function optimizeServer(server) {
|
|||
|
|
if (server) {
|
|||
|
|
// 设置keep-alive超时
|
|||
|
|
server.keepAliveTimeout = serverConfig.keepAliveTimeout;
|
|||
|
|
|
|||
|
|
// 设置headers超时
|
|||
|
|
server.headersTimeout = serverConfig.headersTimeout;
|
|||
|
|
|
|||
|
|
// 设置最大连接数
|
|||
|
|
server.maxConnections = serverConfig.maxConnections;
|
|||
|
|
|
|||
|
|
// 监听服务器错误
|
|||
|
|
server.on('error', (error) => {
|
|||
|
|
logger.error('服务器错误:', error);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 监听连接错误
|
|||
|
|
server.on('clientError', (err, socket) => {
|
|||
|
|
logger.error('客户端连接错误:', err);
|
|||
|
|
if (!socket.destroyed) {
|
|||
|
|
socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 优雅关闭处理
|
|||
|
|
process.on('SIGTERM', () => {
|
|||
|
|
logger.info('收到SIGTERM信号,开始优雅关闭服务器...');
|
|||
|
|
server.close(() => {
|
|||
|
|
process.exit(0);
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
process.on('SIGINT', () => {
|
|||
|
|
logger.info('收到SIGINT信号,开始优雅关闭服务器...');
|
|||
|
|
server.close(() => {
|
|||
|
|
process.exit(0);
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 添加进程异常处理
|
|||
|
|
*/
|
|||
|
|
function setupProcessHandlers() {
|
|||
|
|
// 未捕获的异常
|
|||
|
|
process.on('uncaughtException', (error) => {
|
|||
|
|
logger.error('未捕获的异常:', error);
|
|||
|
|
// 优雅退出
|
|||
|
|
process.exit(1);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 未处理的Promise拒绝
|
|||
|
|
process.on('unhandledRejection', (reason, promise) => {
|
|||
|
|
const errorInfo = {
|
|||
|
|
type: 'unhandledRejection',
|
|||
|
|
timestamp: new Date().toISOString(),
|
|||
|
|
reason: reason instanceof Error
|
|||
|
|
? {
|
|||
|
|
message: reason.message,
|
|||
|
|
stack: reason.stack,
|
|||
|
|
name: reason.name
|
|||
|
|
}
|
|||
|
|
: typeof reason === 'object'
|
|||
|
|
? JSON.stringify(reason, null, 2)
|
|||
|
|
: String(reason),
|
|||
|
|
promiseStatus: promise ? 'pending' : 'unknown'
|
|||
|
|
};
|
|||
|
|
logger.error('未处理的Promise拒绝:', errorInfo);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
module.exports = {
|
|||
|
|
serverConfig,
|
|||
|
|
optimizeServer,
|
|||
|
|
setupProcessHandlers
|
|||
|
|
};
|