nthread-js

2.0.0 • Public • Published

Nthread JS

Create easily children thread (process) in NodeJs. The purpose is to delegate some part of your code in another processus.

⚠ Be careful ⚠
Don't try to make an infinite loop during the creation of the thread.
Obviously, your server/computer will be affected by the number of threads and... cash.

☁️ Installation

$ npm install nthread-js

⚙️ Examples Parent + create callback child process

const { Parent } = require('../lib/index');
const parent = new Parent({ debug: false });
 
parent.listen(3000).then(async nthread => {
 
  console.log("[root] - Server connected");
  console.log("[root] - public uri", nthread.getPublicUri());
  console.log("[root] - local uri", nthread.getLocalUri());
 
  nthread.on('*', content => console.log(content));
 
  const child = await nthread.create(thread => {
    thread.log('[child] - is now connected with PID: ' + thread.getPid());
    
    thread.response(content => {
      console.log("[child] - response", content);
      content === "Hello" ? thread.emit('Hi back !') : thread.emit('Fine and you?');
    });
  });
 
  child.emit('Hello');
 
  // child.response(content => {
  nthread.response(({ client }, content) => {
    console.log("[root] - response", content)
    content === "Hi back !" ? child.emit('How are you ?') : null;
  });
});

⚙️ Examples Child trying to connect to the parent process

const { Child } = require('../lib/index');
const child = new Child({ debug: true });
 
child.connect("http://127.0.0.1:3000").then(async thread => {
  thread.log('[child] - is now connected with PID: ' + thread.getPid());
  
  thread.emit('Hi back !');
 
  thread.response(content => {
    console.log("[child] - response", content);
    content === "How are you ?" ? thread.emit('Fine and you?') : null;
  });
});
 

More examples

📝 Parent usage

const parent = new Parent({
  // options
});

Options parameter

Name Type Description
tmpFolder = '%default_tmp_folder%/nthread_generated' String Temporary folder used to save js code
secure = false Boolean Use protocol http or https
debug = false Boolean Enable debug
socket = undefined Object Socket.IO API
server = undefined Object http API https API

async listen(port: number = random, callback: function = undefined) : Promise<Thread>

Establishing a socket server connection to communicate between the parent and the children process.

⚙️ Thread usage

After the connection is established, listen return a Thread instance.

Name Return Description
async create(thread_code: function) Promise Create a new Thread from a thread_code
async load(path_file: string) Promise Create a new Thread from an import code
async close() Undefined Close every ChildThreads connection
emit(content: any) Undefined Emit content to all the children
async response(function: callback) Promise<...any> Callback will be called for each response doesn't matter the child
getAllChildrenThread() Array Retrieve all the children
getChildThreadByGuuid(guuid: string) ChildThread Retrieve a specific ChildThread by guuid
getPublicUri() String Retrieve public uri
getLocalUri() String Retrieve local uri
async on(event: string, callback: function) Promise<...any> Listen an event

on evenements

event for child_process : stdout, stderr, exit and close
event for client : connected, disconnected, response and log

Name Return Description
* { event: string, guuid: string, content: any } : object
child_process { event: string, guuid: string, content: any } : object
*child_process{event} { guuid: string, content: any } : object
{guuid}child_process* { event: string, content: any } : object
{guuid}child_process{event} content: any
client { event: string, guuid: string, content: any } : object
*client{event} { guuid: string, content: any } : object
{guuid}client* { event: string, content: any } : object
{guuid}client{event} content: any

⚙️ ChildThread usage

After the thread creation, create or load return a ChildThread instance.
ChildThread is not the child process !!! But it give you the possibility to communicate with it.

Name Return Description
emit(content: any) Undefined Emit content
async response(callback: function) Promise<...any> Callback as soon the childProcess send a message
async close() Undefined Close the connection
getPid() Number Retrieve pid
getGuuid() String Retrieve Guuid
async on(event: string, callback: function) Promise<...any> Listen an event

📝 Child usage AKA thread_code or path_file

const child = new Child({
  // options
});

Options

Name Type Description
debug = false Boolean Enable debug
socket = undefined Object Socket.IO API

async connect(url: string, guuid: string = undefined) : Promise<Thread>

Establishing a socket connection to the Parent thread.

⚙️ Thread usage

Name Return Description
log(content: any) Undefined Log a message directly in the parent thread
emit(content: any) Undefined Emit content to the parent thread
async response(callback: function) Promise<...any> Callback as soon the childThread send a message
async close() Undefined Close the connection
getPid() Number Retrieve pid
getGuuid() String Retrieve Guuid
async on(event: string, callback: function) Promise<...any> Listen an event

⚠️ ChildThread IS NOT ChildProcess

After created ChildThread, a ChildProcess is created.
The ChildProcess is another processus within your thread_code or your path_file is executed.
ChildThread is an instance from the Parent to communicate with the ChildProcess.
With emit and response.

👥 Contributing

Please help us to improve the project by contributing :)

❓️ Testing

$ npm install
$ npm test

Dependencies (9)

Dev Dependencies (0)

    Package Sidebar

    Install

    npm i nthread-js

    Weekly Downloads

    0

    Version

    2.0.0

    License

    ISC

    Unpacked Size

    30.2 kB

    Total Files

    17

    Last publish

    Collaborators

    • dobobaie