Electron中如何让主进程和渲染进程之间进行即时通信呢?

Electron中如何让主进程和渲染进程之间进行即时通信呢?

我查验到:
electron 通信

有4种方式:

image.png

但是没有说过有即时通信的使用说明。

阅读 1.8k
avatarAI BotBETA

在 Electron 中,主进程和渲染进程之间的即时通信可以通过以下方式实现:

使用 ipcMain 和 ipcRenderer 模块进行进程间通信

ipcMain 和 ipcRenderer 是 Electron 提供的用于进程间通信的模块,可以在主进程和渲染进程之间进行通信。使用这些模块,您可以通过 Electron 的 IPC(Inter-Process Communication)机制在两个进程之间传递消息,实现即时通信。

在主进程中,您可以使用 ipcMain 模块创建侦听器来监听来自渲染进程的消息,并在接收到消息时执行相应的操作。例如,以下代码示例演示了如何在主进程中创建一个侦听器来接收来自渲染进程的消息并打印出来:

const { ipcMain } = require('electron')

ipcMain.on('message', (event, arg) => {
  console.log(arg)
})

在渲染进程中,您可以使用 ipcRenderer 模块发送消息到主进程。以下代码示例演示了如何在渲染进程中发送一个消息到主进程:

const { ipcRenderer } = require('electron')

ipcRenderer.send('message', 'Hello from Renderer!')

使用 session.postMessage() 方法进行通信

除了使用 Electron 的 IPC 机制进行通信外,您还可以使用 HTML5 的 postMessage API 在两个进程之间传递消息。在渲染进程中,您可以使用 session.postMessage() 方法向主进程发送消息。以下代码示例演示了如何在渲染进程中使用 session.postMessage() 方法发送消息到主进程:

const { session } = require('electron')

session.fromPartition('persist:main').then((session) => {
  session.webRequest.onMessage((event, message) => {
    console.log(message)
  })
})
2 个回答

winMain//主进程
winRenderer//渲染进程

const ipcMain = require('electron').remote.ipcMain
winRenderer.loadURL(rendererPage)
//主进程响应rendererPage中发出的指令'MainMsgFromRender'
ipcMain.on('MainMsgFromRender', function(event, arg) {

//接受到rendererPage已打开的消息,可向rendererPage传输数据
event.sender.send('message', '数据')

})

rendererPage中发出的指令
const ipcRenderer = require('electron').ipcRenderer
ipcRenderer.send('MainMsgFromRender', '打开了')//首次加载给主进程发消息,后续发消息通过这个发送给主进程
// 监听主进程返回的消息
ipcRenderer.on('message', function (event, arg) {
console.log('监听到主进程的消息', arg)
})

纯手打的,大概思路就是在创建出的进程里面先去发送消息给主进程,主进程接收到之后可以做出回应,(ipc.on可以理解成监听)这样就可以达到即时通信的效果

我认为主进程和渲染进程跑在同一台电脑上,所以通信都可以认为是即时通信。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题