hn-hlw-service/utils/server-config.js

103 lines
2.4 KiB
JavaScript
Raw Permalink Normal View History

2026-07-27 11:28:33 +08:00
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
};