tiny-worker

WebJar for tiny-worker

License

License

BSD 3-Clause
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

tiny-worker
Last Version

Last Version

1.1.7
Release Date

Release Date

Type

Type

jar
Description

Description

tiny-worker
WebJar for tiny-worker
Project URL

Project URL

https://www.webjars.org
Source Code Management

Source Code Management

https://github.com/avoidwork/tiny-worker

Download tiny-worker

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/tiny-worker/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>tiny-worker</artifactId>
    <version>1.1.7</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/tiny-worker/
implementation 'org.webjars.npm:tiny-worker:1.1.7'
// https://jarcasting.com/artifacts/org.webjars.npm/tiny-worker/
implementation ("org.webjars.npm:tiny-worker:1.1.7")
'org.webjars.npm:tiny-worker:jar:1.1.7'
<dependency org="org.webjars.npm" name="tiny-worker" rev="1.1.7">
  <artifact name="tiny-worker" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='tiny-worker', version='1.1.7')
)
libraryDependencies += "org.webjars.npm" % "tiny-worker" % "1.1.7"
[org.webjars.npm/tiny-worker "1.1.7"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

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

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

  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
  1. 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);
  1. Why SIGTERM or SIGINT?
  • Unix/BSD will work with SIGTERM, but if you also need to support Windows use SIGINT

License

Copyright (c) 2019 Jason Mulligan Licensed under the BSD-3 license

Versions

Version
1.1.7