jdz321 / node-sync-message

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

node-sync-message

实现node进程间同步通信

USAGE

子进程创建后2秒,向主进程发消息“who am i”,然后等待回答
主进程收到消息,思考了2秒后回答“you are my child”

in parent process

const { fork } = require('child_process')
const SyncMessage = require('node-sync-message')
const delay = require('delay')

const child = fork('./child.js', {
  stdio: 'inherit',
})
const syncMessageMaster = SyncMessage.master(child)


syncMessageMaster.onMessage = async (data) => {
  console.log('parent receive ask: ', data) 

  await delay(2000)

  return 'you are my child'
}

in child process

const syncMessageChild = require('node-sync-message').child()
const delay = require('delay')

(async () => {
  await delay(2000)

  const result = await syncMessageChild.send('who am i')

  console.log('clild receive answer: ', result) 
})()

Continuation-passing style (CPS)

const syncMessageChild = require('node-sync-message').child()
const delay = require('delay')


(async () => {
  await delay(2000)

  syncMessageChild.send('who am i', (err, res) => {
    console.log('clild receive answer: ', result) 
  })

  await delay(4000)
})()

Set timeout time

const syncMessageChild = require('node-sync-message').child()
const delay = require('delay')


(async () => {
  await delay(2000)

  try {
    // promise -> reject, throw an error
    const result = await syncMessageChild.send('who am i', { timeout: 1000 })
    console.log('clild receive answer: ', result) 
  } catch(err) {
    console.log('clild receive error: ', err)
  }

  syncMessageChild.send('who am i', { timeout: 1000 }, (err, res) => {
    // err instanceof Error === true
    console.log('clild receive error: ', err)
    // res -> undefined
    console.log('clild receive answer: ', res)
  })

  await delay(4000)
})()

About


Languages

Language:JavaScript 100.0%