diff --git a/src/client/client.ts b/src/client/client.ts index 261c4ab..0f5fdb9 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -139,7 +139,10 @@ router.get( ',' + Math.abs(new Date().getTime() - timeStart.getTime()) / 1000 + ',' + req.originalUrl ) - res.status(200).send(data) + const dataString = JSON.stringify(data) + const buffer = Buffer.from(dataString) + const size = buffer.length + res.status(200).setHeader('X-File-Size', size).setHeader('Content-Type', 'application/json').send(buffer) } ) diff --git a/src/clientMain.ts b/src/clientMain.ts index 42d2b37..8c1ef86 100644 --- a/src/clientMain.ts +++ b/src/clientMain.ts @@ -1,4 +1,6 @@ import * as dotenv from 'dotenv' +import cluster from 'cluster' +import os from 'os' dotenv.config() import express from 'express' import cors from 'cors' @@ -7,25 +9,43 @@ import { dbReady } from './db/db' import processAll from './process/process' import listenKills from './process/onKill' -const app = express() +const cCPUs = os.cpus().length; + const port = 3000 -app.use(express.json()) +if (cluster.isPrimary) { + // Create a worker for each CPU + for (let i = 0; i < cCPUs; i++) { + cluster.fork(); + } + cluster.on('online', function (worker) { + console.log('Worker ' + worker.process.pid + ' is online.'); + }); + cluster.on('exit', function (worker, code, signal) { + console.log('worker ' + worker.process.pid + ' died.'); + }); +} -app.use(cors()) -app.get('/', (req, res) => { - res.send('Tone client API online') -}) -app.use('/', client) export default new Promise(async (resolve, reject) => { - await dbReady() - await processAll() - await listenKills() - const listenServer = app.listen(port, '0.0.0.0', () => { - console.log(`Tone client api listening on port ${port}`) - resolve(listenServer) - }) + if (!cluster.isPrimary) { + const app = express() + app.use(express.json()) + app.use(cors({ exposedHeaders: ['X-File-Size', 'Content-Encoding'] })) + app.get('/', (req, res) => { + res.send('Tone client API online') + }) + + app.use('/', client) + + await dbReady() + await processAll() + await listenKills() + const listenServer = app.listen(port, '0.0.0.0', () => { + console.log(`Tone client api listening on port ${port}`) + resolve(listenServer) + }) + } }) \ No newline at end of file