Files
shadowsocks-over-websocket/node_modules/throng/readme.md
2017-04-07 16:04:38 +08:00

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
```