electron主进程的nodejs消息循环是如何驱动的

很简单,有个NodeBindings::EmbedThreadRunner的函数,是在主进程的工作线程运行。这个函数会监听uv_loop_->iocp有没事件,如果有的话,就发消息给主线程,让主线程调用NodeBindings::UvRunOnce,里面就是调用libuv,然后驱动nodejs。

那如果nodejs是开了定时器呢?在监听uv_loop_->iocp的时候会有个超时,超时的时间就是定时器的间隔。

### Electron 主进程向渲染进程发送消息Electron 中,`ipcMain` 是主进程中的模块,而 `ipcRenderer` 则是渲染进程中的模块。两者通过 IPC(Inter-Process Communication)机制实现通信。 以下是主进程向渲染进程发送消息的具体示例: #### 示例代码 ```javascript // main.js (主进程) const { app, BrowserWindow, ipcMain } = require('electron'); let mainWindow; app.whenReady().then(() => { mainWindow = new BrowserWindow({ webPreferences: { preload: __dirname + '/preload.js', // 预加载脚本路径 nodeIntegration: false, contextIsolation: true } }); mainWindow.loadFile('index.html'); }); // 使用 ipcMain 向渲染进程发送消息 ipcMain.on('request-message-from-renderer', (event) => { event.reply('response-to-renderer', '这是来自主进程消息'); // 发送消息给渲染进程[^1] }); ``` ```javascript // preload.js (预加载脚本) const { contextBridge, ipcRenderer } = require('electron'); contextBridge.exposeInMainWorld('api', { sendMessageToMain: () => ipcRenderer.send('request-message-from-renderer'), // 请求主进程消息[^2] receiveMessageFromMain: (callback) => ipcRenderer.on('response-to-renderer', callback) // 接收主进程消息[^3] }); ``` ```html <!-- index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Electron Example</title> </head> <body> <script> window.api.sendMessageToMain(); // 调用预加载脚本的方法请求主进程数据 window.api.receiveMessageFromMain((event, message) => { console.log(message); // 输出接收到的主进程消息 }); </script> </body> </html> ``` #### 解析 上述代码展示了如何利用 `ipcMain` 和 `ipcRenderer` 进行主进程与渲染进程间的通信: - **主进程**监听事件并响应渲染进程发出的请求,随后调用 `event.reply()` 方法返回消息。 - **预加载脚本**作为桥梁,在安全模式下允许渲染进程访问特定 API。 - **渲染进程**通过调用预加载脚本暴露的功能发起请求,并接收主进程发回的数据。 此方法遵循现代 Electron 的最佳实践,即启用上下文隔离 (`contextIsolation`) 并禁用 Node.js 集成 (`nodeIntegration`),从而提升安全性[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值