134 lines
2.1 KiB
Markdown
134 lines
2.1 KiB
Markdown
# Throng
|
|
|
|
Dead-simple one-liner for clustered Node.js apps.
|
|
|
|
Runs X workers and respawns them if they go down.
|
|
Correctly handles signals from the OS.
|
|
|
|
```js
|
|
const throng = require('throng');
|
|
|
|
throng((id) => {
|
|
console.log(`Started worker ${id}`);
|
|
});
|
|
```
|
|
|
|
```
|
|
$ node example
|
|
Started worker 1
|
|
Started worker 2
|
|
Started worker 3
|
|
Started worker 4
|
|
```
|
|
|
|
## Installation
|
|
|
|
```
|
|
npm install --save throng
|
|
```
|
|
|
|
For older versions of node (< 4.x), use throng 2.x.
|
|
|
|
## Use
|
|
|
|
Simplest; automatically fork 1 worker per CPU core:
|
|
|
|
```js
|
|
throng(startFunction);
|
|
```
|
|
|
|
Specify a number of workers:
|
|
|
|
```js
|
|
throng(3, startFunction);
|
|
```
|
|
|
|
Specify more options:
|
|
|
|
```js
|
|
throng({
|
|
workers: 16,
|
|
grace: 1000,
|
|
master: masterFunction,
|
|
start: startFunction
|
|
});
|
|
```
|
|
|
|
Handle signals (for cleanup on a kill signal, for instance):
|
|
|
|
```js
|
|
throng((id) => {
|
|
console.log(`Started worker ${id}`);
|
|
|
|
process.on('SIGTERM', function() {
|
|
console.log(`Worker ${id} exiting`);
|
|
console.log('Cleanup here');
|
|
process.exit();
|
|
});
|
|
});
|
|
```
|
|
|
|
## All Options (with defaults)
|
|
|
|
```js
|
|
throng({
|
|
workers: 4, // Number of workers (cpu count)
|
|
lifetime: 10000, // ms to keep cluster alive (Infinity)
|
|
grace: 4000 // ms grace period after worker SIGTERM (5000)
|
|
}, startFn);
|
|
```
|
|
|
|
## A Complex example
|
|
|
|
```js
|
|
const throng = require('./lib/throng');
|
|
|
|
throng({
|
|
workers: 4,
|
|
master: startMaster,
|
|
start: startWorker
|
|
});
|
|
|
|
// This will only be called once
|
|
function startMaster() {
|
|
console.log(`Started master`);
|
|
}
|
|
|
|
// This will be called four times
|
|
function startWorker(id) {
|
|
console.log(`Started worker ${ id }`);
|
|
|
|
process.on('SIGTERM', () => {
|
|
console.log(`Worker ${ id } exiting...`);
|
|
console.log('(cleanup would happen here)');
|
|
process.exit();
|
|
});
|
|
}
|
|
```
|
|
|
|
```
|
|
$ node example-complex.js
|
|
Started master
|
|
Started worker 1
|
|
Started worker 2
|
|
Started worker 3
|
|
Started worker 4
|
|
|
|
$ killall node
|
|
|
|
Worker 3 exiting...
|
|
Worker 4 exiting...
|
|
(cleanup would happen here)
|
|
(cleanup would happen here)
|
|
Worker 2 exiting...
|
|
(cleanup would happen here)
|
|
Worker 1 exiting...
|
|
(cleanup would happen here)
|
|
```
|
|
|
|
## Tests
|
|
|
|
```
|
|
npm test
|
|
```
|