Skip to content
Snippets Groups Projects
README.md 1.83 KiB
Newer Older
Jason Mulligan's avatar
Jason Mulligan committed
# 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
Jason Mulligan's avatar
Jason Mulligan committed
#### Creating a Worker from a file
The worker script:
```javascript
onmessage = function (ev) {
Jason Mulligan's avatar
Jason Mulligan committed
	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!");
Jason Mulligan's avatar
Jason Mulligan committed
```
Jason Mulligan's avatar
Jason Mulligan committed

#### Creating a Worker from a Function
```javascript
Jason Mulligan's avatar
Jason Mulligan committed
var Worker = require("tiny-worker");
var worker = new Worker(function () {
	self.onmessage = function (ev) {
		postMessage(ev.data);
	};
});

worker.onmessage = function (ev) {
Jason Mulligan's avatar
Jason Mulligan committed
	console.log(ev.data);
	worker.terminate();
Jason Mulligan's avatar
Jason Mulligan committed
worker.postMessage("Hello World!");
```

## Properties
#### onmessage
Message handler, accepts an `Event`

#### onerror
Error handler, accepts an `Event`

## API
Jason Mulligan's avatar
Jason Mulligan committed
#### addEventListener(event, fn)
Adds an event listener

#### postMessage()
Broadcasts a message to the `Worker`

Jason Mulligan's avatar
Jason Mulligan committed
#### terminate()
Terminates the `Worker`

Jason Mulligan's avatar
Jason Mulligan committed
## FAQ
1. I have an orphaned child process that lives on past the parent process' lifespan
Jason Mulligan's avatar
Jason Mulligan committed
  * Most likely a `SIGTERM` or `SIGINT` is not reaching the child process
Jason Mulligan's avatar
Jason Mulligan committed
2. How do I insure all process are terminated?
Jason Mulligan's avatar
Jason Mulligan committed
  * 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`
Jason Mulligan's avatar
Jason Mulligan committed

Jason Mulligan's avatar
Jason Mulligan committed
Copyright (c) 2017 Jason Mulligan
Licensed under the BSD-3 license