Skip to content

Repository files navigation

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:

varWorker=require("tiny-worker");varworker=newWorker("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):

exportconstdataFormatter=(data)=>{return`${data} World!`;};

The worker script (repeat.js):

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

The core script:

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

Creating a Worker from a Function

varWorker=require("tiny-worker");varworker=newWorker(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'varWorker=require("tiny-worker");Worker.setRange(2,20);varworker=newWorker(function(){postMessage(process.debugPort);});worker.onmessage=function(ev){console.log(ev.data);//prints any number between 1236 and 1254worker.terminate();}

manual redirection

//parent is started with '--debug=1234'varWorker=require("tiny-worker");varworker=newWorker(function(){postMessage(process.debugPort);},[],{noDebugRedirection: true,execArgv: ["--debug=1235"]});worker.onmessage=function(ev){console.log(ev.data);//prints 1235worker.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

About

Tiny WebWorker for the Server

Topics

Resources

Stars

252 stars

Watchers

7 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages