signal-slides/example/server.cjs
Карпич Дмитрий Александрович 97977d44d8 chore(*): add all
2025-05-28 03:48:01 +03:00

61 lines
2.0 KiB
JavaScript
Executable File

#!/usr/bin/env node
const http = require('http');
// Конфигурация приложения
let debugMode = false;
// Создаем HTTP-сервер
const server = http.createServer((req, res) => {
res.end(`Debug mode: ${debugMode ? 'ON' : 'OFF'}`);
});
// Graceful shutdown
const gracefulShutdown = (signal) => {
console.log(`\nReceived ${signal}. Closing server...`);
server.close(() => {
console.log('All connections closed. Exiting.');
process.exit(0);
});
setTimeout(() => {
console.error('Forcing shutdown after 5 seconds!');
process.exit(1);
}, 5000);
};
// Обработчики сигналов
process.on('SIGINT', () => gracefulShutdown('SIGINT (Ctrl+C)')); // Terminal interrupt
process.on('SIGTERM', () => gracefulShutdown('SIGTERM')); // Default kill signal
process.on('SIGHUP', () => { // Hangup
console.log('\nReceived SIGHUP. Reloading configuration...');
// Здесь можно перечитать конфиги
});
// Пользовательские сигналы
// Выключен для демонстрации поведения встроенного дебаггера
// теперь при перехвате SIGUSR1, дебаггер не будет активирован
/*
process.on('SIGUSR1', () => { // User-defined 1
debugMode = true;
console.log('\nDebug mode activated (SIGUSR1)');
});
*/
process.on('SIGUSR2', () => { // User-defined 2
debugMode = false;
console.log('\nDebug mode deactivated (SIGUSR2)');
});
// Запуск сервера
server.listen(3003, () => {
const pid = process.pid;
console.log(`Server started. PID: ${pid}`);
console.log('Test commands:');
console.log(` Kill with SIGTERM: kill -TERM ${pid}`);
console.log(` Toggle debug mode: kill -USR1 ${pid} / kill -USR2 ${pid}`);
console.log(` Force kill: kill -9 ${pid}`);
console.log('Endpoint: curl http://localhost:3003');
});