shinobi-worker

0.0.16 • Public • Published

shinobi-worker

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']

Usage : Worker (child_process.spawn)

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)
}

An Honest Remark

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

Package Sidebar

Install

npm i shinobi-worker

Weekly Downloads

0

Version

0.0.16

License

MIT

Unpacked Size

9.15 kB

Total Files

4

Last publish

Collaborators

  • moeiscool