Have ideas to improve npm?Join in the discussion! »

    throng
    DefinitelyTyped icon, indicating that this package has TypeScript declarations provided by the separate @types/throng package

    5.0.0 • Public • Published

    Throng

    Dead-simple one-liner for clustered Node.js apps.

    Forks N workers and creates new ones if they go down. Correctly handles signals from the OS.

    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
    

    Use

    Fork 1 worker per CPU:

    throng(workerStartFunction)

    Specify the number of workers:

    throng({ worker: workerStartFunction, count: 3 })

    More options:

    throng({
      master: masterStartFunction,
      worker: workerStartFunction,
      count: 16,
      grace: 1000
    })

    Handling signals:

    (for cleaning up before disconnecting a worker on a SIGTERM, for instance)

    throng({ worker })
     
    function worker(id, disconnect) {
      console.log(`Started worker ${id}`)
     
      process.on('SIGTERM', () => {
        console.log(`Worker ${id} exiting (cleanup here)`)
        disconnect()
      })
    })

    All options (with defaults)

    throng({
      master: masterFn,               // Fn to call in master process (can be async)
      worker: workerFn,               // Fn to call in cluster workers (can be async)
      count: 4,                       // Number of workers (cpu count)
      lifetime: Infinity,             // Min time to keep cluster alive (ms)
      grace: 5000,                    // Grace period between signal and hard shutdown (ms)
      signals: ['SIGTERM', 'SIGINT']  // Signals that trigger a shutdown (proxied to workers)
    })

    A complex example

    const throng = require('throng')
     
    throng({ master, worker, count: 4 })
     
    // This will only be called once
    function master() {
      console.log('Started master')
     
      process.once('beforeExit', () => {
        console.log('Master cleanup.')
      })
    }
     
    // This will be called four times
    function worker(id, disconnect) {
      console.log(`Started worker ${ id }`)
      process.once('SIGTERM', shutdown)
      process.once('SIGINT', shutdown)
     
      function shutdown() {
        console.log(`Worker ${ id } cleanup.`)
        disconnect()
      }
    }
    $ node example-complex.js
    Started master
    Started worker 1
    Started worker 3
    Started worker 2
    Started worker 4
    ^C
    Worker 1 cleanup.
    Worker 3 cleanup.
    Worker 2 cleanup.
    Worker 4 cleanup.
    Master cleanup.
    

    Staying alive

    Throng forks replacements for workers that crash so your cluster can continue working through failures.

    $ node example-crashy.js
    -1--2--3--4--2--1--3--4--crash!--1--3--4--crash!--5--3--4--6--5--3--4--crash!--6--crash!--crash!--7--6--8--9--7--6--8--9--crash!--7--6--9--10--7--6--9--10--crash!--7--9--10--11--7--crash!--9--crash!--7--12--9--13--crash!--12--9--crash!--crash!--crash!--14--crash!--12--15--crash!--14--18--15--19--14--18--15--crash!--19--14--crash!--15--20--14--21--15--20--14--21--15--20--14--21--15--20--14--21--15-
    

    Test

    $ docker-compose run --rm dev
    
    node@docker:/home/app$ npm test
    

    Install

    npm i throng

    DownloadsWeekly Downloads

    96,338

    Version

    5.0.0

    License

    MIT

    Unpacked Size

    6.5 kB

    Total Files

    3

    Last publish

    Collaborators

    • avatar