electron中IPC 渲染進程與主進程通信方法解析

electron中ipcRenderer.invoke、ipcRenderer.on、ipcRenderer.send、ipcRenderer.sendSync作用與區別

IPC 渲染進程與主進程通信方法解析

ipcRenderer 的這幾個方法作用不完全相同,它們適用于不同的通信場景,核心區別在于通信方向是否需要響應以及同步 / 異步特性。下面詳細說明:

1. ipcRenderer.send(channel, ...args)

  • 作用:從渲染進程主進程發送異步消息(單向通信),不需要返回結果。

  • 特點

    • 發送后立即返回,不等待主進程處理。

    • 主進程通過 ipcMain.on(channel, (event, ...args) => { ... }) 接收。

    • 適合只需要通知主進程執行操作,不需要結果的場景。

  • 示例

// 渲染進程ipcRenderer.send('open-file', '/path/to/file');// 主進程ipcMain.on('open-file', (event, path) => {fs.openSync(path, 'r');});

2. ipcRenderer.on(channel, listener)

  • 作用:在渲染進程中監聽主進程發送的特定頻道消息(被動接收)。

  • 特點

    • 用于接收主進程通過 webContents.send(channel, ...args) 發送的消息。

    • 是 “接收消息” 的方法,而非 “發送消息”。

  • 示例

// 渲染進程(監聽主進程消息)ipcRenderer.on('file-opened', (event, content) => {console.log('文件內容:', content);});// 主進程(發送消息給渲染進程)mainWindow.webContents.send('file-opened', '文件內容...');

3. ipcRenderer.invoke(channel, ...args)

  • 作用:從渲染進程主進程發送異步請求,并等待主進程返回結果(類似 HTTP 的請求 - 響應模式)。

  • 特點

    • 返回一個 Promise,可配合 async/await 使用。

    • 主進程通過 ipcMain.handle(channel, async (event, ...args) => { ... }) 處理并返回結果。

    • 適合需要主進程處理后返回數據的場景(如讀取文件、調用系統 API 等)。

  • 示例

// 渲染進程async function readFile() {const content = await ipcRenderer.invoke('read-file', '/path/to/file');
console.log('文件內容:', content);}// 主進程ipcMain.handle('read-file', async (event, path) => {return fs.readFileSync(path, 'utf8'); // 返回結果給渲染進程});

4. ipcRenderer.sendSync(channel, ...args)

  • 作用:從渲染進程主進程發送同步請求,會阻塞渲染進程直到主進程返回結果。

  • 特點

    • 同步執行,會卡住渲染進程(可能導致界面卡頓),不推薦頻繁使用

    • 主進程通過 ipcMain.on(channel, (event, ...args) => { event.returnValue = ... }) 返回結果。

    • 適合極少數必須同步獲取結果的場景。

  • 示例

// 渲染進程(同步等待結果)const content = ipcRenderer.sendSync('read-file-sync', '/path/to/file');console.log('文件內容:', content);// 主進程ipcMain.on('read-file-sync', (event, path) => {event.returnValue = fs.readFileSync(path, 'utf8'); // 通過 returnValue 返回});

核心區別總結

方法通信方向同步 / 異步是否需要返回結果主進程處理方式
send渲染 → 主進程異步不需要ipcMain.on
on主進程 → 渲染異步接收結果配合 webContents.send
invoke渲染 → 主進程異步需要(請求 - 響應)ipcMain.handle
sendSync渲染 → 主進程同步需要(阻塞)ipcMain.on + event.returnValue

最佳實踐

  • 大多數場景優先使用 invoke(異步請求 - 響應)和 send(單向通知)。

  • 避免使用 sendSync,因其會阻塞渲染進程,影響用戶體驗。

  • 主進程向渲染進程發送消息時,用 webContents.send 配合渲染進程的 ipcRenderer.on

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93168.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93168.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93168.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

epoll_event 事件類型詳解

epoll_event 事件類型詳解 epoll_event 是 Linux epoll I/O 多路復用機制的核心結構體&#xff0c;其中的事件類型決定了 epoll 監控的行為和觸發條件。以下是各種事件類型的詳細解析&#xff1a; epoll_event 結構體 #include <sys/epoll.h>typedef union epoll_data {v…

設計自己的小傳輸協議 導論與概念

設計自己的小傳輸協議 導論與概念 1&#xff1a;聊一聊協議頭設計 ? 早在《TCP/IP詳解》中的第一句話中&#xff0c;我們就知道協議的含義是這樣的&#xff1a;協議是通信雙方共同遵守的一套規則&#xff0c;提供格式定義、語義解釋等&#xff0c;使不同設備或軟件能夠正確交…

iOS —— 天氣預報仿寫總結

在iOS中&#xff0c;最常見的網絡請求方式是NSURLSession&#xff0c;它是蘋果推薦的現代API&#xff0c;簡單安全且易于拓展。一次完整的網絡請求流程&#xff1a;構造 NSURL 對象創建 NSURLSessionDataTask發起請求&#xff08;resume&#xff09;在回調中解析數據回到主線程…

MySQL 8.4 Windows 版安裝記錄與步驟參考

導語&#xff1a; MySQL 作為廣泛使用的開源數據庫管理系統&#xff0c;是許多開發者和學習者的必備工具。最近有朋友詢問安裝過程&#xff0c;正好整理了 MySQL 8.4 在 Windows 系統下的安裝步驟和一些注意事項&#xff0c;分享給有需要的朋友做個參考。關于 MySQL&#xff1a…

七、搭建springCloudAlibaba2021.1版本分布式微服務-skywalking9.0鏈路追蹤

前言鏈路追蹤介紹 對于一個大型的幾十個&#xff0c;幾百個微服務構成的微服務架構系統&#xff0c;通常會遇到下面的一系列問題。 如何串聯整個調用鏈路&#xff0c;快速定位問題&#xff1f;如何澄清各個微服務之間的依賴關系&#xff1f;如何進行各個微服務接口的性能分析&a…

深入理解大語言模型生成參數:temperature、top\_k、top\_p 等全解析

在使用大語言模型&#xff08;如 GPT-4、LLaMA、ChatGLM 等&#xff09;進行文本生成任務時&#xff0c;很多開發者會面對各種“生成參數”&#xff0c;如 temperature、top_k、top_p、repetition_penalty 等。這些參數雖然看起來抽象&#xff0c;但掌握它們的意義和配置技巧&a…

vulhub Web Machine(N7)靶場攻略

下載地址&#xff1a; https://download.vulnhub.com/webmachine/Web-Machine-N7.ova 使用方法&#xff1a; 靶場下載好以后不用解壓&#xff0c;需要使用Oracle VirtualBox虛擬機打開&#xff0c;用VMware會報錯。安裝Oracle VirtualBox虛擬機時安裝地址不能隨便選擇&#…

【機器學習深度學習】模型微調:多久才算微調完成?——如何判斷微調收斂,何時終止訓練

目錄 前言 一、微調過程的目標&#xff1a;優化模型表現 二、微調需要多久&#xff1f; 微調時間無法確定 三、如何判斷微調何時收斂&#xff1f; 3.1 觀察Loss的下降趨勢 3.2 損失值趨于平穩&#xff0c;意味著收斂 如何識別收斂&#xff1f; 3.3 驗證Loss的波動&…

紅隊視角:實戰滲透測試中漏洞利用的進階技巧與防御

紅隊作為滲透測試的 “攻擊方”&#xff0c;其核心價值不僅在于發現漏洞&#xff0c;更在于挖掘漏洞的深度利用方式 —— 通過繞過防護措施、組合低危漏洞形成攻擊鏈&#xff0c;暴露企業真實安全風險。從紅隊視角解析漏洞利用的進階技巧&#xff0c;既能幫助防御方理解攻擊思路…

OpenHarmony BUILD.gn中執行腳本

在OpenHarmony編譯構建中筆者經常遇到這樣的場景——需要執行sh腳本完成某些操作。筆者將OpenHarmony BUILD.gn中執行腳本的方法分享如下&#xff1a; 前置知識點 1.能夠把自定義的子系統加入OpenHarmony源碼的編譯構建&#xff0c;請參考&#xff1a;https://ost.51cto.com/…

QUIC協議如何在UDP基礎上解決網絡切換問題

一、UDP 四元組的本質局限UDP 本身無連接狀態&#xff0c;其數據包僅通過四元組尋址。但 QUIC 在 UDP 之上構建了完整的連接語義。二、QUIC 的連接遷移核心機制1. 連接標識符&#xff08;Connection ID&#xff09;關鍵設計&#xff1a;每個 QUIC 連接擁有全局唯一 64-bit Conn…

力扣131:分割回文串

力扣131:分割回文串題目思路代碼題目 給你一個字符串 s&#xff0c;請你將 s 分割成一些 子串&#xff0c;使每個子串都是 回文串 。返回 s 所有可能的分割方案。 思路 從題目中我們可以總結出這道題的三個需要解決的問題&#xff1a; 如何判斷回文串如何找到一種方案里的所…

代駕小程序系統開發:引領出行行業數字化轉型

隨著數字技術的飛速發展&#xff0c;出行行業正經歷著深刻的數字化轉型。代駕小程序系統作為這一轉型的重要推手&#xff0c;以其高效、便捷、智能的特點&#xff0c;引領著出行行業向數字化、網絡化、智能化方向發展。一、數字化管理&#xff0c;提升運營效率代駕小程序系統通…

數獨求解器與生成器(回溯算法實現)

摘要本畢業設計旨在利用MATLAB技術實現一個基于回溯算法的數獨求解器與生成器。通過深入分析數獨游戲的規則和回溯算法的原理&#xff0c;設計并實現了數獨求解的核心算法&#xff0c;同時開發了數獨生成功能&#xff0c;能夠生成符合規則的有效數獨謎題。系統采用MATLAB圖形用…

[數據結構]#7 哈希表

哈希表&#xff08;Hash Table&#xff09;&#xff0c;有時也稱為散列表&#xff0c;是一種數據結構&#xff0c;它提供了一種快速存取數據的方法。哈希表利用一個被稱為哈希函數的機制將鍵映射到表中的一個位置來直接訪問記錄&#xff0c;以此加快查找的速度。哈希表通常支持…

C++ 23種設計模式-工廠模式

工廠模式是一種創建型的設計模式&#xff0c;他提供了一種創建對象的最佳方式&#xff0c;而無需指定將要創建對象的具體類。包括&#xff1a;簡單工廠模式、工廠方法模式、抽象工廠模式。簡單工廠模式組成成員&#xff1a;抽象產品類、具體產品類 A、B、C等、工廠類工作原理&a…

vue3 el-table 行的某個特定值來決定某些列是否顯示

在 Vue 3 中使用 Element Plus 的 <el-table> 組件時&#xff0c;如果你想要根據行的某個特定值來決定某些列是否顯示&#xff0c;你可以通過自定義列渲染函數&#xff08;render 函數&#xff09;來實現這一需求。下面是一個如何實現該功能的步驟說明和示例代碼。步驟 1…

電商數據采集API與爬蟲技術結合的全網比價方案

一、技術選型與工具準備API優先策略官方API接入&#xff1a;京東、淘寶、拼多多等平臺提供商品詳情API&#xff0c;需注冊開發者賬號獲取API Key。例如&#xff1a;京東API支持實時獲取商品價格、庫存、評價數據。淘寶API通過RESTful接口返回JSON格式的商品信息&#xff0c;需O…

Socket詳解

一.定義Socket&#xff08;套接字&#xff09;是網絡編程的核心&#xff0c;它允許不同主機或同一主機的不同進程之間進行通信&#xff0c;Socket API 提供了一套標準的接口&#xff0c;支持 TCP、UDP、IP 等協議分為以下三個類型&#xff1a;SOCK_STREAM: 用于tcp協議&#xf…

如何實現打印功能

一、AI賦能提供思路基本框架<!-- 隱藏的打印內容&#xff08;默認不顯示&#xff09; --> <div id"print-container" style"display: none;"><h1>退貨單打印內容</h1><table><!-- 打印專用的表格結構 --></table&g…