Tiny WebWorker for Server
require() is available for flexible inline Worker scripts. Optional parameters args Array & options Object; see child_process.fork() documentation.
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!");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");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!");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.
//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();}//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();}Message handler, accepts an Event
Error handler, accepts an Event
Adds an event listener
Broadcasts a message to the Worker
Terminates the Worker
Sets range for debug ports, only affects current process. Returns true if successful.
- I have an orphaned child process that lives on past the parent process' lifespan
- Most likely a
SIGTERMorSIGINTis not reaching the child process
- How do I insure all process are terminated?
- In your core script register a listener for
SIGTERMorSIGINTviaprocess.on()which terminates (all) worker process(es) and then gracefully shutdowns viaprocess.exit(0);
- Why
SIGTERMorSIGINT?
- Unix/BSD will work with
SIGTERM, but if you also need to support Windows useSIGINT
Copyright (c) 2019 Jason Mulligan Licensed under the BSD-3 license