Skip to content

Commit f217519

Browse files
Fabian Wilesalexeagle
authored andcommitted
feat(examples): add nodejs_binary cluster example (#1515)
1 parent 84773e9 commit f217519

5 files changed

Lines changed: 55 additions & 17 deletions

File tree

examples/nestjs/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"@nestjs/core": "6.5.2",
99
"@nestjs/platform-express": "6.5.2",
1010
"@types/jasmine": "^3.5.0",
11+
"@types/superagent": "^4.1.4",
1112
"@types/supertest": "^2.0.8",
1213
"minimist": "1.2.0",
1314
"reflect-metadata": "0.1.13",

examples/nestjs/src/BUILD.bazel

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@ ts_library(
4040
":app",
4141
"@npm//@nestjs/common",
4242
"@npm//@types/jasmine",
43+
"@npm//@types/superagent",
4344
"@npm//@types/supertest",
4445
"@npm//jasmine",
46+
"@npm//superagent",
4547
"@npm//supertest",
4648
],
4749
)
@@ -56,7 +58,8 @@ nodejs_binary(
5658
"@npm//@nestjs/core",
5759
"@npm//minimist",
5860
],
59-
entry_point = ":main.ts",
61+
entry_point = ":main",
62+
templated_args = ["--nobazel_patch_module_resolver"],
6063
)
6164

6265
jasmine_node_test(

examples/nestjs/src/main.spec.ts

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
1-
import {INestApplication} from '@nestjs/common';
21
import * as request from 'supertest';
32

4-
import {bootstrap} from './main';
3+
import {bootstrap, bootstrapCluster} from './main';
54

65
describe('App', () => {
7-
let server: INestApplication;
8-
9-
beforeAll(async () => {
10-
server = await bootstrap(3000);
11-
});
12-
afterAll(async () => {
13-
await server.close();
14-
})
15-
16-
it(`GET /`, () => {
17-
return request(server.getHttpServer()).get('/hello').expect(200).expect({
6+
it(`GET /`, async () => {
7+
const server = await bootstrap(3000);
8+
await request(server.getHttpServer()).get('/hello').expect(200).expect({
189
message: 'Hello world!'
1910
});
11+
await server.close();
2012
});
2113
});

examples/nestjs/src/main.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import {INestApplication, Logger} from '@nestjs/common';
22
import {NestFactory} from '@nestjs/core';
33
import {ExpressAdapter} from '@nestjs/platform-express';
4+
import * as cluster from 'cluster';
5+
import * as os from 'os';
46

57
import {AppModule} from './app.module';
68

@@ -11,7 +13,34 @@ export async function bootstrap(port: number): Promise<INestApplication> {
1113
return app;
1214
}
1315

16+
export async function bootstrapCluster(port: number): Promise<cluster.Worker[]|void> {
17+
return new Promise((resolve, reject) => {
18+
if (cluster.isMaster) {
19+
const cpuCount = os.cpus().length;
20+
21+
for (let i = 0; i < cpuCount; i += 1) {
22+
cluster.fork();
23+
}
24+
25+
let workers = [];
26+
cluster.on('online', worker => {
27+
Logger.log('Worker ' + worker.process.pid + ' is online.');
28+
workers.push(worker);
29+
if (workers.length === cpuCount) {
30+
resolve(workers);
31+
}
32+
});
33+
cluster.on('exit', ({process}, code, signal) => {
34+
Logger.log('worker ' + process.pid + ' died.');
35+
});
36+
} else {
37+
bootstrap(port);
38+
resolve();
39+
}
40+
})
41+
}
42+
1443
if (require.main === module) {
1544
const argv = require('minimist')(process.argv.slice(2));
16-
bootstrap(argv.port || 3000);
45+
bootstrapCluster(argv.port || 3000);
1746
}

examples/nestjs/yarn.lock

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@
180180
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.21.tgz#4a9db7ef1d1671c0015e632c5fa3d46c86c58c1e"
181181
integrity sha512-nuFlRdBiqbF+PJIEVxm2jLFcQWN7q7iWEJGsBV4n7v1dbI9qXB8im2pMMKMCUZe092sQb5SQft2DHfuQGK5hqQ==
182182

183-
"@types/superagent@*":
183+
"@types/superagent@*", "@types/superagent@^4.1.4":
184184
version "4.1.4"
185185
resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.4.tgz#63f74955a28073870cfd9c100bcacb26d72b3764"
186186
integrity sha512-SRH2q6/5/nhOkAuLXm3azRGjBYpoKCZWh138Rt1AxSIyE6/1b9uClIH2V+JfyDtjIvgr5yQqYgNUmdpbneJoZQ==
@@ -1388,7 +1388,7 @@ readable-stream@1.1.x:
13881388
isarray "0.0.1"
13891389
string_decoder "~0.10.x"
13901390

1391-
readable-stream@^2.2.2, readable-stream@^2.3.5:
1391+
readable-stream@^2.2.2:
13921392
version "2.3.6"
13931393
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
13941394
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
@@ -1401,6 +1401,19 @@ readable-stream@^2.2.2, readable-stream@^2.3.5:
14011401
string_decoder "~1.1.1"
14021402
util-deprecate "~1.0.1"
14031403

1404+
readable-stream@^2.3.5:
1405+
version "2.3.7"
1406+
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
1407+
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
1408+
dependencies:
1409+
core-util-is "~1.0.0"
1410+
inherits "~2.0.3"
1411+
isarray "~1.0.0"
1412+
process-nextick-args "~2.0.0"
1413+
safe-buffer "~5.1.1"
1414+
string_decoder "~1.1.1"
1415+
util-deprecate "~1.0.1"
1416+
14041417
reflect-metadata@0.1.13:
14051418
version "0.1.13"
14061419
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"

0 commit comments

Comments
 (0)