Pandora.js让进程间通信更容易
简洁的进程间对象代理
经过努力,我们提出了『简洁的进程间对象代理』,看下面的例子会清楚得多:
在 PID 为 1 的进程中:
const {publishObject} = require('pandora');
const processInfo = {
async getPid() {
return process.pid; // 假定 PID 是 1
}
}
// 发布 processInfo 在 IPCHub 中,并命名为 processInfo
await publishObject('processInfo', processInfo);在 PID 为 2 的进程中:
const {getProxy} = require('pandora');
// 获得 processInfo 的代理对象
const processInfo = await getProxy('processInfo');
// 调用 getPid() 方法,当然这里需要增加 await,
// 每个代理过来的方法都会变成 async 形式。
// 不过好在 await 一个非 async 的方法也不会出错,
// 所以一般业务逻辑都可以良好的兼容原始对象和代理对象。
const pid = await processInfo.getPid();
// 将会打印 PID 为 1 的进程的 PID: 1
console.log(pid);强大到,就连 Node.js 内置的对象都可以!
// 进程 A
const {publishObject} = require('pandora');
publishObject('math', Math);
// 进程 B
const {getProxy} = require('pandora');
const mathProxy = getProxy('math');
// 将会打印 4
console.log(await mathProxy.pow(2, 2));Service 发布到 IPC-Hub
module.exports = function(pandora) {
pandora.service('serviceName', './serviceImpl.js').publish();
// 直接把这个 Service 发布到 IPC-Hub 中去
// ,当然名字就叫 serviceName 啦~
}本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!