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:
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!");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");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!");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'
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();
}//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();
}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