React Academy · Oppitunti

Prosessien välinen IPC-viestintä

Käytä ipcMainia ja ipcRendereriä viestien turvalliseen lähettämiseen pääprosessin ja Reactin renderöintiprosessin välillä.

Oppitunti 3/413 vaihetta

Prosessien välinen IPC-viestintä on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.

ipcMain.handle: pyyntö–vastausmalli

ipcMain.handle rekisteröi pääprosessiin nimetyn kanavan, joka vastaa renderöintiprosessin pyyntöihin. Se vastaanottaa asynkronisen käsittelijäfunktion, ja sen palautusarvosta tulee renderöintiprosessin Promisen ratkaistu arvo. Tämä sopii erinomaisesti esimerkiksi tiedostojen lukemiseen tai tietokannan kyselyihin.

ipcRenderer.invoke: pääprosessin kutsuminen

ipcRenderer.invoke lähettää viestin nimetyn kanavan kautta ja palauttaa Promisen, joka ratkaistaan pääprosessin käsittelijän palautusarvolla. Näin muodostuu selkeä asynkroninen pyyntö–vastausmalli, joka toimii luontevasti async/await-syntaksin kanssa sekä preload-skriptissä että React-komponenteissa.

ipcRenderer.invoke-kutsujen tarjoaminen contextBridgen kautta

Preload-skripti kääräisee ipcRenderer.invoke-kutsut ja tarjoaa ne contextBridgen kautta. Esimerkiksi: api.readFile = (filePath) => ipcRenderer.invoke('read-file', filePath). Renderöintiprosessi kutsuu window.api.readFile(path)-funktiota ja saa takaisin Promisen — ratkaisu on selkeä ja hiekkalaatikoitu.

Miksi renderöintiprosessi ei tuo ipcRenderer-moduulia suoraan

Kun contextIsolation on käytössä, renderöintiprosessi ei voi suorittaa require('electron')-kutsua tai tuoda ipcRendereria suoraan import-lauseella, koska moduuli ei ole siellä käytettävissä. Kaiken IPC-viestinnän on kuljettava preload-skriptin contextBridge-julkaisun kautta. Tämä on tarkoituksellista: se estää XSS-hyökkäyksiä saamasta käyttöoikeutta IPC-viestintään.

ipcMain.on: viestit ilman vastausta

ipcMain.on kuuntelee yksisuuntaisia viestejä, jotka lähetetään ipcRenderer.send-kutsulla, ei invoke-kutsulla. Automaattista vastauskanavaa ei ole. Tämä malli sopii ilmoituksiin tai komentoihin, joihin renderöintiprosessi ei tarvitse vastausta, kuten tapahtumien kirjaamiseen tai natiivin ilmoituksen käynnistämiseen.

Tietojen lähettäminen pääprosessista renderöintiprosessiin

Pääprosessi voi lähettää tietoja renderöintiprosessiin kutsulla webContents.send('channel-name', data). Tämä on ensisijainen tapa, jolla pääprosessi aloittaa viestinnän, esimerkiksi välittäessään tiedostojärjestelmän tarkkailutapahtumia tai natiivivalikon toimintoja React-käyttöliittymään.

ipcRenderer.on: kuuntelu preload-skriptissä

Preload-skriptissä ipcRenderer.on('update', callback) rekisteröi kuuntelijan pääprosessista tuleville push-viesteille. Callback saa parametrikseen tapahtuman ja kaikki pääprosessin lähettämät tiedot, jotka välität sitten renderer-prosessille contextBridgen kautta käyttöön asetetulla funktiolla.

Tapahtumakuuntelijoiden julkaiseminen contextBridgen kautta

Push-tapahtumille sopiva selkeä malli on seuraava: api.onUpdate = (callback) => ipcRenderer.on('update', (_event, data) => callback(data)). React-komponentit tilavaat muutoksia kutsumalla window.api.onUpdate(setData), ja callback päivittää tilan, kun pääprosessi lähettää uusia tietoja.

Siivous: tapahtumakuuntelijoiden poistaminen

Jokainen ipcRenderer.on-kuuntelija tulee poistaa, kun sitä ei enää tarvita, jotta muistivuodot ja päällekkäiset callback-kutsut vältetään. Preload-funktion tulee palauttaa puhdistusfunktio (esimerkiksi () => ipcRenderer.removeListener('update', callback)), jonka React kutsuu useEffectin puhdistusfunktion palautusarvon kautta.

Tietoturva: IPC-syötteiden validointi

Renderer-prosessista tulevia IPC-syötteitä tulee käsitellä epäluotettavina tietoina pääprosessin käsittelijässä. Validoikaa tiedostopolut aina (estääkää path traversal -hyökkäykset), puhdistakaa kyselyparametrit ja tarkistakaa, että lähettäjän origin on odotettu. Älkää koskaan julkaisko yleiskäyttöistä eval- tai exec-IPC-kanavaa.

IPC-kanavien jäsentäminen

Sovelluksen kasvaessa järjestäkää IPC-kanavat namespacing-käytännöillä, kuten 'fs:read-file', 'db:query' ja 'window:minimize'. Säilyttäkää kanavien nimet jaetussa vakiotiedostossa, jonka sekä main.js että preload-skripti tuovat käyttöön. Näin kirjoitusvirheet voidaan estää ja uudelleenkäsittely on turvallisempaa.

ipcMain.handle-käsittelijän palautusarvo

Mitä tapahtuu ipcMain.handle-käsittelijän palauttamalle arvolle?

Oppitunnin yhteenveto

IPC on Electron-sovellusten välisen viestinnän selkäranka. ipcMain.handle ja ipcRenderer.invoke muodostavat Promise-pohjaisen pyyntö–vastausparin renderer-prosessin käynnistämille toiminnoille. Pääprosessin käynnistämissä push-viesteissä webContents.send ja ipcRenderer.on toimivat yhdessä. Kaikki renderer-prosessin IPC-liikenne tulee reitittää preload-skriptin contextBridgen kautta, ja kuuntelijat tulee aina poistaa muistivuotojen estämiseksi.

Aloita maksutta

Opi React tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
88
Oppitunnit
324

Usein kysytyt kysymykset

Onko oppitunti ”Prosessien välinen IPC-viestintä” ilmainen?

Kyllä – oppitunnin ”Prosessien välinen IPC-viestintä” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Prosessien välinen IPC-viestintä”?

Käytä ipcMainia ja ipcRendereriä viestien turvalliseen lähettämiseen pääprosessin ja Reactin renderöintiprosessin välillä. Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Prosessien välinen IPC-viestintä”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?

Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Electronin arkkitehtuuri: pää- ja renderöintiprosessit
  2. Reactin määrittäminen Electronin kanssa
  3. Prosessien välinen IPC-viestintä
  4. Työpöytäalustojen paketointi ja jakelu
← Takaisin: React Academy