Package Exports
- tiny-worker
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (tiny-worker) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
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.
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
- I have an orphaned child process that lives on past the parent process' lifespan
- Most likely a
SIGTERM
orSIGINT
is not reaching the child process
- How do I insure all process are terminated?
- In your core script register a listener for
SIGTERM
orSIGINT
viaprocess.on()
which terminates (all) worker process(es) and then gracefully shutdowns viaprocess.exit(0);
- Why
SIGTERM
orSIGINT
?
- Unix/BSD will work with
SIGTERM
, but if you also need to support Windows useSIGINT
License
Copyright (c) 2019 Jason Mulligan Licensed under the BSD-3 license