shinobi-worker
Version:
Shinobi worker is made to work as a work around for the failing point(s) of the "Worker" implementation. https://nodejs.org/api/worker_threads.html
104 lines (81 loc) • 4.26 kB
Markdown
Shinobi worker is made to work as a work around for the failing point(s) of the "Worker" implementation. https://nodejs.org/api/worker_threads.html
The "workaround" is that a `child_process/spawn` process is used. `stdin` and `stdout` are used for writing and response monitoring. You may initiate with the following options.
https://shinobi.video by Moe Alam (moeiscool), Shinobi Systems
## Usage : Parent
`Worker(scriptParameters,workerOptions)`
| Worker Option | Description | Required | Default | Example |
|-----------|-------------|----------|---------|---------|
| json | Automatic parsing for when you wish to send and receive JSON data. Currently this method will be very slow for large strings. | No | false | true |
| debug | When responses are not appearing with JSON parsing enabled you may capture errors from the event emitter. See code examples for more information. | No | false | true |
| spawnOptions | Options passed to the `require('child_process').spawn(...)` function. | No | {detached: true} | |
```
const { Worker } = require('shinobi-worker')
const createNewProcess = () => {
// set the first parameter as a string.
const pathToWorkerScript = __dirname + '/newThread.js'
// if you want to pass argument on execution you may set it as an Array as shown on the line below.
// const pathToWorkerScript = [__dirname + '/newThread.js','argument1','argument2']
const workerProcess = Worker(
pathToWorkerScript,
{
json: true,
debug: true,
}
)
workerProcess.on('message',function(data){
// data from worker. if `json` is `true` then your data will be parsed into json automatically.
})
workerProcess.on('close',function(){
// things to do after worker closes
})
workerProcess.on('error',function(data){
// errors from the worker process and/or script.
})
workerProcess.on('failedParse',function(stringThatFailedToParse){
// only work when `debug` is `true` in Worker options.
})
// workerProcess is an Emitter.
// it also contains a direct handle to the `spawn` at `workerProcess.spawnProcess`
return workerProcess
}
```
You can set `scriptParameters` as a string or an array. This represents the parameters fed to `spawn`.
```
// set the first parameter as a string.
const pathToWorkerScript = __dirname + '/newThread.js'
// if you want to pass argument on execution you may set it as an Array as shown on the line below.
const pathToWorkerScript = [__dirname + '/newThread.js','argument1','argument2']
```
`buildParentPort(options)`
| Parameter | Description | Required | Default | Example |
|-----------|-------------|----------|---------|---------|
| json | Automatic parsing for when you wish to send and receive JSON data. Currently this method will be very slow for large strings. | No | false | true |
| debug | When responses are not appearing with JSON parsing enabled you may capture errors from the event emitter. See code examples for more information. | No | false | true |
| uncaughtException | Handler `process.on('uncaughtException', ...)` set to forward to `parentPort.postError(...)`. | No | false | true |
> You should set `json: true` on both parent and worker when used.
```
const { buildParentPort } = require('shinobi-worker')
const parentPort = buildParentPort({
json: true,
debug: true,
uncaughtException: true
})
parentPort.on('message',(data) => {
// data from parent
})
const postMessageToParent = (json) => {
return parentPort.postMessage(json)
}
const postErrorToParent = function(text){
return parentPort.postError(text)
}
```
I don't know what all of the failing points actually are. The only problem I had was that opencv4nodejs doesn't run in a Worker when used in one after one has been used and closed prior.
The error I had is mentioned here https://github.com/justadudewhohacks/opencv4nodejs/issues/555.
```
Module did not self-register
```
Licensed under MIT https://opensource.org/licenses/MIT