进程间通信

Pandora.js 提供了一个进程间对象代理的功能,可以方便的实现跨进程访问、调用。

# 直接发布对象和获取对象代理

看下面的例子:

const {getProxy, publishObject} = require('dorapan');

async function main() {

// 发布 Math 到 IPC-Hub
await publishObject('math', Math);

// 获得对象代理
const proxy = await getProxy('math');

// 所有方法直接 await 调用
const val = await proxy.abs(-1234);
console.log(val);

}
main().catch(console.error);

# Service 使用 IPC-Hub

Pandora.js 提供了进程间的对象代理功能,Service 可以便捷的发布到 IPC-Hub 中。

procfile.js

module.exports = function (pandora) {

// 定义两个进程
pandora
.process('a')
.scale(1);
pandora
.process('b')
.scale(1);

// 定义两个 Service
// (该例子 Service 实现全部写在 procfile.js 中了,这不是一个好的实践)
class ServiceA {
async getPid() {
return process.pid;
}
}
class ServiceB {
constructor(context) {
this.context = context;
}
async start() {
// 或者 require('dorapan').getProxy();
const serviceA = await this.context.getProxy('serviceA');
const pid = await serviceA.getPid();
console.log();
console.log();
console.log('pid from serviceA', pid);
console.log('pid from self', process.pid);
console.log();
console.log();
}
}

// 定义 ServiceA 在 进程 a
pandora
.service('serviceA', ServiceA)
.process('a')
// 标识 serviceA 发布到 IPC-Hub 中
.publish();

// 定义 ServiceB 在进程 b
pandora
.service('serviceB', ServiceB)
.process('b');

}

# 获得 IPC-Hub 整体对象

IPC-Hub 还有一些别的能力,可以通过 require('dorapan').getHub() 获得。

具体参考 pandora-hub 包下的 Facade 类的 API