8-electron 主进程与渲染进程之间的通信(同步通信、异步
2019-08-22 本文已影响0人
程序员李钟意
electron 主进程与渲染进程之间的通信(同步通信、异步通信)
electron 主进程和渲染进程通信
有时候我们想在渲染进程中通过一个事件去执行里面的方法。
或者在渲染进程中通知主进程处理事件,
主进程处理完成后广播一个事件让渲染进程去处理一些事情。
这个时候就用到了主进程和渲染进程之间的相互通信。
electron 主进程和渲染进程的通信主要用到两个模块:ipcMain
和ipcRenderer
ipcMain
:当在主进程中使用时,它处理从渲染器进程(网页)发送出来的异步和同步信息,当然也有可能从主进程向渲染进程发送消息。
ipcRenderer
:使用它提供的一些方法从渲染进程(web 页面)发送同步或异步的消息到主进程。也可以接受主进程回复的消息。
场景 1 渲染进程给主进程发送异步消息
// 渲染进程
const {ipcRenderer} = require('electron');
ipcRenderer.send('msg', {name: '张三'}); // 异步
// 主进程
const {ipcMain} = require('electron');
ipcMain.on('msg', (event, arg) => {
console.log(event, arg);
});
场景 2 渲染进程给主进程发送异步消息,主进程接收到异步消息以后通知渲染进程
// 渲染进程
const {ipcRenderer} = require('electron');
ipcRenderer.send('msg', {name: 'ZHANG_SAN'});
// 主进程
const {ipcMain} = require('electron');
ipcMain.on('msg', (event, arg) => {
event.sender.send('reply', 'pong');
});
// 渲染进程
const {ipcRenderer} = require('electron');
ipcRenderer.on('reply', function(event, arg) {
console.log(arg); // prints 'pong'
});
场景 3 渲染进程给主进程发送同步消息
// 渲染进程
const {ipcRenderer} = require('electron');
const msg = ipcRenderer.sendSync('msg-a');
console.log('msg: ', msg);
// 主进程
ipcMain.on('msg-a', event => {
event.returnValue = 'hello';
});