116 lines
3.0 KiB
Markdown
116 lines
3.0 KiB
Markdown
|
# 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](https://secure.travis-ci.org/avoidwork/tiny-worker.svg)](http://travis-ci.org/avoidwork/tiny-worker)
|
||
|
|
||
|
## 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!");
|
||
|
```
|
||
|
|
||
|
#### 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 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
|
||
|
2. 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);`
|
||
|
3. Why `SIGTERM` or `SIGINT`?
|
||
|
* Unix/BSD will work with `SIGTERM`, but if you also need to support Windows use `SIGINT`
|
||
|
|
||
|
## License
|
||
|
Copyright (c) 2017 Jason Mulligan
|
||
|
Licensed under the BSD-3 license
|