Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

enhancer-recluster

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

enhancer-recluster

Clustering library with support for zero-downtime reloading

  • 0.4.6
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

recluster

Clustering library with support for zero-downtime reloading

usage

If server.js is your regular http server (e.g. express), create cluster.js and add:

var recluster = require('recluster'),
    path = require('path');

var cluster = recluster(path.join(__dirname, 'server.js'));
cluster.run();

process.on('SIGUSR2', function() {
    console.log('Got SIGUSR2, reloading cluster...');
    cluster.reload();
});

console.log("spawned cluster, kill -s SIGUSR2", process.pid, "to reload");

then run it

node cluster.js

To hot-reload the server, simply run

kill -s SIGUSR2 <cluster_pid>

To find out which of the N (= number of cores by default) worker instances you're running from inside server.js, you can use

process.env.WORKER_ID

which is zero-based i.e. 0 <= WORKER_ID < N

options

var cluster = recluster(file, opt)

where

file

Absolute path to the module that defines the server

opt.workers

Number of active workers (default = cores)

opt.timeout

Timeout to kill old workers after reload (seconds).

Defaults to 1 second in development, 1 hour in production.

opt.respawn

Minimum time between worker respawns when workers die (seconds)

opt.backoff

Maximum respawn time (reached via exponential backoff). Set to 0 or undefined to disable exponential backoff.

opt.readyWhen

Use 'listening' for servers (e.g. for express/connect http servers) and 'started' for workers that are immediately ready.

If you want to manually tell recluster when the worker is ready to replace older workers you can use {readyWhen: 'ready'}. Then, to signal readiness from the worker use process.send({cmd: 'ready'})

opt.args

Array of arguments to pass to the worker

opt.log

Log various events to stdout. Currently only 'respawns' is supported. Default: {respawns: true}

opt.logger

Which logger to use. Requires a console-compatible log method Default: console

cluster

The returned object has the following methods:

cluster.run

Starts the cluster by running child processes

cluster.reload(cb)

Hot-reloads new code. some of the children will remain active for opt.timeout seconds after reload

cluster.terminate(cb)

Terminates the entire cluster and removes all listeners.

cluster.activeWorkers()

Returns a hash of all worker slots (0 <= WORKER_ID < N). If a worker isn't available at that slot, the value in the hash is null or undefined. Otherwise, the value will be a worker object that is ready to serve requests.

cluster.workers()

Returns an array of all the workers, including those that are not yet ready or those that will be replaced.

worker cleanup

A server worker can gracefully exit by cleaning up in the 'close' event of its server:

server.on('close', function() {
    // cleanup
});

Non-server workers can listen for the disconnect command and shut down gracefully before the kill timeout:

process.on('message', function(m) {
    if (m.cmd == 'disconnect') {
        // cleanup
    }
})

sticky sessions support

If you need sticky sessions e.g. for socket.io you can use the experimental companion module sticky-listen, which implements an alternate balancer that distributes the sockets based on the client IP (instead of the regular round-robin one)

Bitdeli

Keywords

FAQs

Package last updated on 06 Sep 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc