Paraemu - Parallel Emulator
For user
Install global package
npm i -g paraemu
How to use
-
Setting config file:
File structure:
"server": undefined | // server config"host": @string"port": @int"remote": undefined | // client config"host": @string"port": @int"processes" :"tag": undefined | @string"root": undefined | @string // root path"script": @string // execute file name"args": undefined | @any // node js command line arguments"env": undefined | @string ... // node js command line options...- Script execute path is
./${root}/${script}
.
Basic Example:
// ./test/config.sample.json"processes" :"tag": "proc1""root": "./content/sub1""script": "./worker1.js""args": 1 2 "string" false"script": "./default/sub2/worker2.js""root": "./content/sub3""script": "./worker3.js""env": "--experimental-worker" "--inspect-brk"Server Example:
// ./test/config.server.json"server":"host": "127.0.0.1""port": 23410"processes" :"root": "./content/server/proc1""script": "./task.js""root": "./content/server/proc2""script": "./task.js"Client Example:
// ./test/content/config.client2.json"remote":"host": "127.0.0.1""port": 23410"processes" :"root": "./content/client/proc1""script": "./task.js""root": "./content/client/proc2""script": "./task.js" - Script execute path is
-
Write script file:
(1) Basic Example:
const pemu = ;// "...args" is "rest parameter"const callback = {console; // sender infoconsole;console; // event nameconsole;};// event handlerpemu; // register eventpemu; // register event oncepemu; // remove eventpemu; // trigger event (broadcast)pemu; // trigger event (local group)pemu; // trigger event (target group)// paraemu default eventpemu; // all scripts are ready// paraemu default propertyconsole;(2-1) Worker Threads Example (Main Thread Side):
// ./main_thread.jsconst pemu = ;// usage is equal to 'new Worker(filename[, options])' in Worker Threadslet worker = pemu;(2-2) Worker Threads Example (Worker Side):
// ./worker.jsconst pemu = ;const data = pemuargs; // pemu.args = workerDataconsole;(3-1) Server Client Example (Server Side):
// ./server.jsconst pemu = ;// "...args" is "rest parameter"const callback = {console; // sender infoconsole;console; // event nameconsole;};pemu; // all scripts are ready in server sidepemu; // anyone of clients connected successfullypemu; // anyone of clients disconnectedpemu; // anyone of clients connected successfullypemu; // anyone of clients disconnectedpemu; // anyone of clients has gone wrong(3-2) Server Client Example (Client Side):
// ./client.jsconst pemu = ;// "...args" is "rest parameter"const callback = {console; // sender infoconsole;console; // event nameconsole;};pemu; // all scripts are ready in client sidepemu; // anyone of clients connected successfullypemu; // anyone of clients disconnectedpemu; // your client connected successfullypemu; // your client disconnectedpemu; // your client has gone wrong(4-1) Send and Receive Example (Send Side):
// ./send.jsconst pemu = ;try// If receive.js do not use "respondWith" function, deliver await only wait up to 2 seconds.// In there, target_id must be a full id string.let response = await pemuconsole;catch error// If send.js disconnected to receive.js, deliver await only wait up to 30 seconds and throw exception.console;(4-2) Send and Receive Example (Receive Side):
// ./receive.jsconst pemu = ;pemu;- Please refer to Event Emitter for other usages.
-
Run command line:
paraemu ./config.json
-
Debug task use Chrome DevTools (Optional):
(1) Add "--inspect-brk" in "env" field in config.json
(2) Run commend line which is similar to step 3
(3) Url set "chrome://inspect" in Chrome
(4) Click "Open dedicated DevTools for Node" link
(5) Click "Add connection" button
(6) Add "localhost:9230" in url field
(Debugger listening start from 9230 port in first child process)
(7) Press "F5" key to refresh page
(8) Click "inspect" link in Remote Target -
Debug main task use Chrome DevTools (Optional):
(1) Run command line which is different from step 3:paraemu --inspect-brk ./config
(2) Url set "chrome://inspect" in Chrome
(3) Click"Open dedicated DevTools for Node" link
(4) Click "Add connection" button
(5) Add "localhost:9229" in url field
(Debugger listening start from 9229 port in main process)
(6) Press "F5" key to refresh page
(7) Click "inspect" link in Remote Target
Noun Definition
- Group: Total workspace in config.
- Task: Each child process in config.
- Job: Detailed work in each child process.
For maintainer
Install project
-
Clone project:
git clone <project-url>
-
Install dependency package:
npm install
Build and Run
-
Run test (use node):
node ./paraemu-cli.js ./test/config.sample.json --arg1 --arg2
-
Run test (use npm):
npm run test