From 7c34463cc4083932bd52d2ae8cbcba866bd2e12a Mon Sep 17 00:00:00 2001 From: Jeffrey Sun Date: Tue, 2 May 2017 14:05:02 -0700 Subject: [PATCH] use express-cluster for drop-in cluster support --- package.json | 1 + server.js | 42 +++++++++++++++++++++++------------------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index bf00d49..3fed837 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "canvas": "^1.6.2", "chance": "^1.0.4", "express": "^4.14.0", + "express-cluster": "0.0.4", "newrelic": "^1.35.1", "node-gyp": "^3.4.0", "sanitize-filename": "^1.6.1", diff --git a/server.js b/server.js index dcea871..89db84a 100644 --- a/server.js +++ b/server.js @@ -5,6 +5,7 @@ try { } const express = require('express'); +const cluster = require('express-cluster'); const uuid = require('uuid/v4'); const sanitize = require('sanitize-filename'); const Canvas = require('canvas'); @@ -20,26 +21,29 @@ function composeImage(width, height, seed) { return canvas; }; -const app = express(); - const cacheTimeout = 60 * 60 * 24 * 30; -app.get('/healthcheck', (req, res) => { - res.status(200).end(); -}); +cluster((worker) => { + const app = express(); -app.get('/:width/:seed', (req, res) => { - let width = parseInt(req.params.width) || 400; - if (width > 400) width = 400; - const seed = sanitize(req.params.seed) || uuid(); - const canvas = composeImage(width, width, seed); - const buffer = canvas.toBuffer(); - res.set('Cache-Control', 'max-age=' + cacheTimeout); - res.set('Content-length', buffer.length); - res.type('png'); - res.end(buffer, 'binary'); -}); + app.get('/healthcheck', (req, res) => { + res.status(200).end(); + }); -app.listen(process.env.PORT || 3000, () => { - console.log('listening on http://localhost:3000'); -}); + app.get('/:width/:seed', (req, res) => { + let width = parseInt(req.params.width) || 400; + if (width > 400) width = 400; + const seed = sanitize(req.params.seed) || uuid(); + const canvas = composeImage(width, width, seed); + const buffer = canvas.toBuffer(); + res.set('Cache-Control', 'max-age=' + cacheTimeout); + res.set('Content-length', buffer.length); + res.type('png'); + res.end(buffer, 'binary'); + }); + + activePort = process.env.PORT || 3000; + app.listen(activePort, () => { + console.log('worker ' + worker.id + ' is listening on port ' + activePort); + }); +})