0 Tage Serie
javascript / expert
Snippet

Orchestrierung eines sanften Shutdowns (Graceful Shutdown)

Eine professionelle Node.js-Anwendung muss Terminierungssignale wie `SIGTERM` verarbeiten. `server.close()` verhindert, dass der Server neue Verbindungen akzeptiert, wartet aber darauf, dass bestehende beendet werden. Ein sekundärer Timeout stellt sicher, dass der Prozess schließlich endet, selbst wenn Verbindungen hängen bleiben.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const http = require('http');
const server = http.createServer((req, res) => res.end('OK'));
process.on('SIGTERM', () => {
console.log('SIGTERM received. Closing server...');
server.close(() => {
console.log('Server closed. Exiting process.');
process.exit(0);
});
// Force exit after timeout if connections hang
setTimeout(() => {
console.error('Forcing exit after timeout');
process.exit(1);
}, 10000);
});
nodejs
Erklärung
1
server.close(() => { ... })
Wartet darauf, dass alle aktiven Keep-Alive-Verbindungen geschlossen werden, bevor der Prozess beendet wird.
2
setTimeout(..., 10000)
Sicherheitsanker, um zu verhindern, dass der Prozess unendlich lange hängen bleibt.