diff --git a/server/index.js b/server/index.js index 3b4d6d9..986b37d 100644 --- a/server/index.js +++ b/server/index.js @@ -1,23 +1,41 @@ const express = require('express'); const path = require('path'); +const cluster = require('cluster'); +const numCPUs = require('os').cpus().length; -const app = express(); const PORT = process.env.PORT || 5000; -// Priority serve any static files. -app.use(express.static(path.resolve(__dirname, '../react-ui/build'))); +// Multi-process to utilize all CPU cores. +if (cluster.isMaster) { + console.error(`Node cluster master ${process.pid} is running`); -// Answer API requests. -app.get('/api', function (req, res) { - res.set('Content-Type', 'application/json'); - res.send('{"message":"Hello from the custom server!"}'); -}); + // Fork workers. + for (let i = 0; i < numCPUs; i++) { + cluster.fork(); + } -// All remaining requests return the React app, so it can handle routing. -app.get('*', function(request, response) { - response.sendFile(path.resolve(__dirname, '../react-ui/build', 'index.html')); -}); + cluster.on('exit', (worker, code, signal) => { + console.error(`Node cluster worker ${worker.process.pid} exited: code ${code}, signal ${signal}`); + }); -app.listen(PORT, function () { - console.log(`Listening on port ${PORT}`); -}); +} else { + const app = express(); + + // Priority serve any static files. + app.use(express.static(path.resolve(__dirname, '../react-ui/build'))); + + // Answer API requests. + app.get('/api', function (req, res) { + res.set('Content-Type', 'application/json'); + res.send('{"message":"Hello from the custom server!"}'); + }); + + // All remaining requests return the React app, so it can handle routing. + app.get('*', function(request, response) { + response.sendFile(path.resolve(__dirname, '../react-ui/build', 'index.html')); + }); + + app.listen(PORT, function () { + console.error(`Node cluster worker ${process.pid}: listening on port ${PORT}`); + }); +}