Skip to content

dobobaie/nthread-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published