Comunicazione IPC tra processi
Usi ipcMain e ipcRenderer per inviare messaggi in modo sicuro tra il processo main e il renderer React.
Comunicazione IPC tra processi è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.
ipcMain.handle: pattern richiesta-risposta
ipcMain.handle registra un canale denominato nel processo principale che risponde alle richieste del renderer. Accetta una funzione gestore asincrona e il suo valore restituito diventa il valore risolto della Promise nel renderer, rendendolo ideale per operazioni come la lettura di file o le query a un database.
ipcRenderer.invoke: chiamare il processo principale
ipcRenderer.invoke invia un messaggio su un canale denominato e restituisce una Promise che si risolve con il valore restituito dal gestore del processo principale. In questo modo si crea un pattern asincrono chiaro di richiesta-risposta, che funziona naturalmente con async/await sia nello script di preload sia nei componenti React.
Esposizione di invoke tramite contextBridge
Lo script di preload racchiude le chiamate a ipcRenderer.invoke e le espone tramite contextBridge. Ad esempio: api.readFile = (filePath) => ipcRenderer.invoke('read-file', filePath). Il renderer chiama window.api.readFile(path) e riceve una Promise: un'interfaccia chiara e sottoposta a sandbox.
Perché il renderer non importa mai ipcRenderer
Con contextIsolation abilitato, il processo renderer non può eseguire require('electron') né importare direttamente ipcRenderer: il modulo non è semplicemente disponibile. Tutte le comunicazioni IPC devono passare dall'esposizione tramite contextBridge dello script di preload. È una scelta intenzionale: impedisce agli attacchi XSS di ottenere accesso a IPC.
ipcMain.on: messaggi senza risposta
ipcMain.on ascolta i messaggi unidirezionali inviati con ipcRenderer.send (non invoke). Non esiste un canale di risposta automatico: questo pattern è adatto per notifiche o comandi per i quali il renderer non necessita di una risposta, come registrare eventi o attivare una notifica nativa.
Inviare dati dal processo principale al renderer
Il processo principale può inviare dati al renderer utilizzando webContents.send('channel-name', data). Questo è il metodo principale con cui il processo principale avvia la comunicazione, ad esempio per inoltrare eventi di monitoraggio del file system o azioni dei menu nativi all'interfaccia React.
ipcRenderer.on: ascolto nel preload
Nello script di preload, ipcRenderer.on('update', callback) registra un listener per i messaggi push provenienti dal processo principale. Il callback riceve l'evento e tutti i dati inviati dal processo principale, che poi inoltra al renderer tramite la funzione esposta da contextBridge.
Esporre i listener degli eventi tramite contextBridge
Un pattern pulito per gli eventi push è il seguente: api.onUpdate = (callback) => ipcRenderer.on('update', (_event, data) => callback(data)). I componenti React si iscrivono chiamando window.api.onUpdate(setData), e il callback aggiorna lo stato quando il processo principale invia nuovi dati.
Pulizia: rimozione dei listener degli eventi
Ogni listener ipcRenderer.on deve essere rimosso quando non è più necessario, per evitare perdite di memoria e callback duplicati. La funzione di preload dovrebbe restituire una funzione di pulizia (ad es., () => ipcRenderer.removeListener('update', callback)) che React richiama nel return di pulizia di useEffect.
Sicurezza: convalida degli input IPC
Gli input IPC provenienti dal renderer devono essere trattati come dati non attendibili nel gestore del processo principale. Convalidi sempre i percorsi dei file (per prevenire gli attacchi di path traversal), sanifichi i parametri delle query e verifichi che l'origine del mittente sia quella prevista. Non esponga mai un canale IPC generico per eval o exec.
Strutturare i canali IPC
Man mano che l'app cresce, organizzi i canali IPC usando convenzioni di denominazione con namespace: 'fs:read-file', 'db:query', 'window:minimize'. Mantenga i nomi dei canali in un file di costanti condiviso, importato sia da main.js sia dallo script di preload, per evitare errori di battitura e rendere più sicuro il refactoring.
Valore restituito da ipcMain.handle
Che cosa accade al valore restituito da un gestore ipcMain.handle?
Riepilogo della lezione
IPC è la dorsale della comunicazione in Electron. ipcMain.handle e ipcRenderer.invoke formano una coppia richiesta-risposta basata su Promise per le operazioni avviate dal renderer. Per gli eventi push avviati dal processo principale, webContents.send e ipcRenderer.on lavorano insieme. Tutte le comunicazioni IPC nel renderer devono passare attraverso il contextBridge del preload e i listener devono essere sempre rimossi per evitare perdite di memoria.
Domande Frequenti
La lezione «Comunicazione IPC tra processi» è gratuita?
Sì — il testo completo di «Comunicazione IPC tra processi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.
Cosa imparerò in «Comunicazione IPC tra processi»?
Usi ipcMain e ipcRenderer per inviare messaggi in modo sicuro tra il processo main e il renderer React. Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare React Academy?
Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Comunicazione IPC tra processi»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione React Academy?
Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Architettura di Electron: processi main e renderer
- Configurazione di React con Electron
- Comunicazione IPC tra processi
- Creazione e distribuzione per piattaforme desktop