简介
@theatersoft/bus 是一个基于 Node.js 实现的简易消息通信库,通过封装 EventEmitter 类实现了多进程/线程之间的数据传递,同时也支持异步操作以及 Promise 封装。
安装
在项目根目录下运行以下命令进行安装:
npm install @theatersoft/bus
使用方法
创建 bus 实例
首先需要创建一个 bus 实例,可以根据给定的名称来实例化一个 bus:
const { Bus } = require('@theatersoft/bus') const bus = new Bus('example-bus')
发送和接收消息
发送和接收消息是 bus 的主要功能,可以使用 send
方法来向其他进程/线程发送消息:
bus.send('example-message', { key: 'value' })
同时也可以使用 on
方法来监听消息:
bus.on('example-message', (message) => { console.log(`Received message: ${message}`) })
异步操作与 Promise
在有些情况下我们需要进行异步操作,并需要在操作完成后执行一些逻辑。这时可以使用 bus 的 request
方法,该方法可以发送消息并返回一个 Promise 对象,当数据处理完毕后通过 resolve
返回处理结果,例如:
bus.request('example-request', { key: 'value' }).then((result) => { console.log(`Received result: ${result}`) })
同时,在另一个进程/线程中可以监听并处理这个请求:
bus.on('example-request', (message, reply) => { console.log(`Received request: ${message}`) // 处理请求并返回结果 const result = 'result' reply(result) })
销毁 bus 实例
当不再需要使用 bus 实例时,可以通过调用 destroy
方法进行销毁:
bus.destroy()
示例代码
以下是使用 @theatersoft/bus 实现的一个简单示例:
-- -------------------- ---- ------- -- ------------ ----- - --- - - --------------------------- ----- --- - --- ------------------------ -------------- --------- ------ -- - --------------------- ----- ------------ ------------- -- ------------- -- - ------------- -- ----- -- ------------ ----- - --- - - --------------------------- ----- --- - --- ------------------------ ------------------- --------------------- -- - --------------------- ----- ----------- -- -------------
在这个示例中,我们创建了两个进程分别运行 process-1.js
和 process-2.js
。process-1.js
监听 ping
消息,并在接收到消息后返回 pong
,process-2.js
发送 ping
消息并等待接收到 pong
消息后退出。通过这个示例我们可以看到,在多进程/线程的情况下,@theatersoft/bus 能够很好地满足我们的通信需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/144455