node package manager
Don’t reinvent the wheel. Reuse code within your team. Create a free org »

tiny-worker

tiny-worker

Tiny WebWorker for Server

require() is available for flexible inline Worker scripts. Optional parameters args Array & options Object; see child_process.fork() documentation.

build status

Example

Creating a Worker from a file

The worker script:

onmessage = function (ev) {
    postMessage(ev.data);
};

The core script:

var Worker = require("tiny-worker");
var worker = new Worker("repeat.js");
 
worker.onmessage = function (ev) {
    console.log(ev.data);
    worker.terminate();
};
 
worker.postMessage("Hello World!");

Creating a Worker from a Function

var Worker = require("tiny-worker");
var worker = new Worker(function () {
    self.onmessage = function (ev) {
        postMessage(ev.data);
    };
});
 
worker.onmessage = function (ev) {
    console.log(ev.data);
    worker.terminate();
};
 
worker.postMessage("Hello World!");

Debugging

To be able to debug a child process, it must have a differnt debug port than the parent. Tiny worker does this by adding a random port within a range to the parents debug port. The default Range is [1, 300], it can be changed with the setRange(min, max) method. To disable any automatic port redirection set options.noDebugRedirection = true.

automatic redirection

//parent is started with '--debug=1234' 
var Worker = require("tiny-worker");
Worker.setRange(2, 20);
 
var worker = new Worker(function () {
    postMessage(process.debugPort); 
});
 
worker.onmessage = function (ev) {
    console.log(ev.data); //prints any number between 1236 and 1254 
    worker.terminate();
}

manual redirection

//parent is started with '--debug=1234' 
var Worker = require("tiny-worker");
 
var worker = new Worker(function () {
    postMessage(process.debugPort); 
}, [], {noDebugRedirection: true, execArgv: ["--debug=1235"]});
 
worker.onmessage = function (ev) {
    console.log(ev.data); //prints 1235 
    worker.terminate();
}

Properties

onmessage

Message handler, accepts an Event

onerror

Error handler, accepts an Event

API

addEventListener(event, fn)

Adds an event listener

postMessage()

Broadcasts a message to the Worker

terminate()

Terminates the Worker

static setRange(min, max)

Sets range for debug ports, only affects current process. Returns true if successful.

FAQ

  1. I have an orphaned child process that lives on past the parent process' lifespan
  • Most likely a SIGTERM or SIGINT is not reaching the child process
  1. How do I insure all process are terminated?
  • In your core script register a listener for SIGTERM or SIGINT via process.on() which terminates (all) worker process(es) and then gracefully shutdowns via process.exit(0);
  1. Why SIGTERM or SIGINT?
  • Unix/BSD will work with SIGTERM, but if you also need to support Windows use SIGINT

License

Copyright (c) 2017 Jason Mulligan Licensed under the BSD-3 license