Wondering what’s next for npm?Check out our public roadmap! »

    tiny-worker

    2.3.0 • Public • Published

    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!");

    Enable ES6 import/export within Worker file

    The worker helper script (helper.js):

    export const dataFormatter = (data) => {
        return `${data} World!`;
    };

    The worker script (repeat.js):

    import { dataFormatter } from "./helper";
     
    onmessage = function (ev) {
        const data = dataFormatter(ev.data);
        postMessage(data);
    };

    The core script:

    var Worker = require("tiny-worker");
    var worker = new Worker("repeat.js", [], {esm: true});
     
    worker.onmessage = function (ev) {
        console.log(ev.data);
        worker.terminate();
    };
     
    worker.postMessage("Hello");

    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) 2019 Jason Mulligan Licensed under the BSD-3 license

    Install

    npm i tiny-worker

    DownloadsWeekly Downloads

    27,855

    Version

    2.3.0

    License

    BSD-3-Clause

    Unpacked Size

    12.7 kB

    Total Files

    6

    Last publish

    Collaborators

    • avatar