本文将以热门的跨平台桌面应用构建方案 Electron 为例,讲讲在跨进程通信中出现的痛点,并使用RxJs解决这些问题,当然这里的方案不仅仅适用于Electron,同样可以复制到如跨页面通信,主页面与 worker 之间的场景。
Electron 主进程和渲染进程间,官方提供了基础的通信能力。例如,在主进程中向渲染进程发布消息的方式为:
webContents.send('ping', 'whoooooooh!')
渲染进程响应方式为:
.ipcRenderer.on('ping', (event, message) => {
console.log(message) // Prints 'whoooooooh!'
})
支持在响应函数中同步(event.returnValue
)或者异步(event.reply
)的回复消息。对于event.reply
来说,其本质是发送一条新的不同类型的消息,该消息指定了接收方。
在实际使用场景里,往往是甲方产生消费需求,发送消息告知乙方其需要消费数据,由乙方生产数据后回复消息供消费者消费。为了方便描述,我们把首先发送消息的甲方称为消费者,回复消息的乙方称为生产者。