2.0.0 • Published 7 days ago

cfork v2.0.0

Weekly downloads
24,094
License
MIT
Repository
github
Last release
7 days ago

cfork

NPM version Node.js CI Test coverage npm download Node.js Version

cluster fork and restart easy way.

  • Easy fork with worker file path
  • Handle worker restart, even it was exit unexpected.
  • Auto error log process uncaughtException event

Install

npm install cfork

Usage

ESM and TypeScript

import util from 'node:util';
import { cfork } from 'cfork';

const clusterWorker = cfork({
  exec: '/your/app/worker.js',
  // slaves: ['/your/app/slave.js'],
  // count: require('os').cpus().length,
}).on('fork', worker => {
    console.warn('[%s] [worker:%d] new worker start', Date(), worker.process.pid);
  })
  .on('disconnect', worker => {
    console.warn('[%s] [master:%s] wroker:%s disconnect, exitedAfterDisconnect: %s, state: %s.',
      Date(), process.pid, worker.process.pid, worker.exitedAfterDisconnect, worker.state);
  })
  .on('exit', (worker, code, signal) => {
    const exitCode = worker.process.exitCode;
    const err = new Error(util.format('worker %s died (code: %s, signal: %s, exitedAfterDisconnect: %s, state: %s)',
      worker.process.pid, exitCode, signal, worker.exitedAfterDisconnect, worker.state));
    err.name = 'WorkerDiedError';
    console.error('[%s] [master:%s] wroker exit: %s', Date(), process.pid, err.stack);
  })
  // if you do not listen to this event
  // cfork will output this message to stderr
  .on('unexpectedExit', (worker, code, signal) => {
    // logger what you want
  })
  // emit when reach refork times limit
  .on('reachReforkLimit', () => {
    // do what you want
  });

// if you do not listen to this event
// cfork will listen it and output the error message to stderr
process.on('uncaughtException', err => {
  // do what you want
});

// if you want to dynamically disable refork, you can call the setDisableRefork, priority over the refork parameter
cfork.setDisableRefork(clusterWorker, true);

CommonJS

const { cfork } = require('cfork');

Options

  • exec : exec file path
  • slaves : slave process config
  • args : exec arguments
  • count : fork worker nums, default is os.cpus().length
  • refork : refork when worker disconnect or unexpected exit, default is true
  • limit: limit refork times within the duration, default is 60
  • duration: default is 60000, one minute (so, the refork times < limit / duration)
  • autoCoverage: auto fork with istanbul when running_under_istanbul env set, default is false
  • env: attach some environment variable key-value pairs to the worker / slave process, default to an empty object.
  • windowsHide: Hide the forked processes console window that would normally be created on Windows systems, default to false.
  • serialization: Specify the kind of serialization used for sending messages between processes. Possible values are 'json' and 'advanced'. See Advanced serialization for child_process for more details. Default: false.

License

MIT

Contributors

Contributors

Made with contributors-img.