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: ```javascript onmessage = function (ev) {postMessage(ev.data);
};
```
The core script:
```javascript
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): ```javascript export const dataFormatter = (data) => {return `${data} World!`;
};
```
The worker script (repeat.js):
```javascript
import { dataFormatter } from "./helper";
onmessage = function (ev) {
const data = dataFormatter(ev.data);
postMessage(data);
};
```
The core script:
```javascript
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
```javascript 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
```javascript //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
```javascript //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 anEvent
onerror
Error handler, accepts anEvent
API
addEventListener(event, fn)
Adds an event listenerpostMessage()
Broadcasts a message to theWorker
terminate()
Terminates theWorker
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
SIGTERM
or SIGINT
is not reaching the child process
- How do I insure all process are terminated?
SIGTERM
or SIGINT
via process.on()
which terminates (all) worker process(es) and then gracefully shutdowns via process.exit(0);
- Why
SIGTERM
orSIGINT
?
SIGTERM
, but if you also need to support Windows use SIGINT