An express middleware to restart the fastboot process after N requets. Code from https://github.com/outdoorsy/fastboot-graceful-server.
// worker-killer.js
/* eslint-env node */
module.exports = function(options) {
options.minRequests = options.minRequests || 100;
options.maxRequests = options.maxRequests || 200;
let server = options.server;
let ui = server.ui;
let requestCount = 0;
let flexRoom = options.maxRequests - options.minRequests;
let killRequestCount = options.minRequests + Math.floor(Math.random() * flexRoom);
return function(req, res, next) {
requestCount++;
ui.writeLine(`Request ${requestCount}/${killRequestCount}: ${req.headers['user-agent']}`);
if (requestCount === killRequestCount) {
res.on('finish', () => {
ui.writeLine('reached max request count, shutting down');
req.connection.server.close(() => {
ui.writeLine('server closed');
process.exit();
});
// kill after 30s just in case processes don't finish in time
setTimeout(function() {
console.error("Could not close connections in time, forcefully shutting down");
process.exit()
}, 30 * 1000);
});
}
next();
}
};
// index.js
/* eslint-env node */
const FastBootAppServer = require('fastboot-app-server');
const workerKiller = require('./worker-killer');
let server = new FastBootAppServer({
distPath: 'path/to/fastboot-dist',
beforeMiddleware: function(app) {
app.use(workerKiller({
minRequests: 1,
maxRequests: 1,
server: this,
}))
}
});
server.start();
$ node index.js