Skip to content

Commit 990190e

Browse files
committed
Add worker_threads example and clustering
1 parent ed8fc5b commit 990190e

11 files changed

Lines changed: 791 additions & 172 deletions

Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ FROM node:12.2
22

33
ENV HOME=/home/app
44

5+
RUN apt-get update && apt-get install htop
6+
57
COPY package.json package-lock.json $HOME/node_docker/
68

79
WORKDIR $HOME/node_docker

config/custom-environment-variables.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
{
22
"App": {
3+
"cluster": {
4+
"enabled": "CLUSTER_ENABLED"
5+
},
36
"database": {
47
"url": "DATABASE_URL",
58
"port": "DATABASE_PORT",

config/default.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
{
22
"App": {
3+
"cluster": {
4+
"enabled": false
5+
},
36
"database": {
47
"url": "mongodb://localhost",
58
"port": 27017,

config/docker.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
{
22
"App": {
3+
"cluster": {
4+
"enabled": true
5+
},
36
"database": {
47
"url": "mongodb://mongodb"
58
}

docker-compose.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ services:
66
environment:
77
NODE_ENV: development
88
tty: true
9+
ports:
10+
- '3000:3000'
911
depends_on:
1012
- mongodb
1113
mongodb:

index.js

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,33 @@
11
const log = require('./src/log');
22
const { setupApp } = require('./src/app');
33
const config = require('config');
4+
const { createLightship } = require('lightship');
5+
const cluster = require('cluster');
6+
const CPUs = require('os').cpus().length;
47

5-
setupApp()
6-
.then(app => app.listen(config.get('App.port'), () => log.info(`app running on port ${config.get('App.port')}`)))
7-
.catch(error => {
8-
log.error(error);
9-
process.exit(1); // eslint-disable-line
8+
log.info('CPUs available', CPUs);
9+
10+
const ls = createLightship();
11+
12+
if(config.get('App.cluster.enabled') && cluster.isMaster) {
13+
log.info(`Master ${process.pid} is running`);
14+
15+
for(let i = 0; i < CPUs; i++) {
16+
cluster.fork();
17+
}
18+
cluster.on('exit', (worker) => {
19+
log.info(`worker ${worker.process.pid} died`);
1020
});
21+
} else {
22+
setupApp()
23+
.then(app => {
24+
app.listen(config.get('App.port'), () => log.info(`app running on port ${config.get('App.port')}`));
25+
log.info(`Worker ${process.pid} started`);
26+
return app;
27+
})
28+
.then(() => ls.signalReady())
29+
.catch(error => {
30+
log.error(error);
31+
process.exit(1); // eslint-disable-line
32+
});
33+
}

0 commit comments

Comments
 (0)