0Pricing
React Academy · Lekcja

Komunikacja IPC między procesami

Użyją Państwo ipcMain i ipcRenderer do bezpiecznego przesyłania komunikatów między procesem głównym a rendererem React.

Komunikacja IPC między procesami to bezpłatna lekcja React Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

ipcMain.handle: wzorzec żądanie–odpowiedź

ipcMain.handle rejestruje nazwany kanał w procesie głównym, który odpowiada na żądania renderera. Przyjmuje asynchroniczną funkcję obsługi, a jej wartość zwracana staje się rozwiązaną wartością Promise w rendererze, dzięki czemu rozwiązanie dobrze nadaje się do operacji takich jak odczytywanie plików lub wykonywanie zapytań do bazy danych.

ipcRenderer.invoke: wywoływanie procesu głównego

ipcRenderer.invoke wysyła komunikat nazwanym kanałem i zwraca Promise, który zostaje rozstrzygnięty wartością zwróconą przez funkcję obsługi w procesie głównym. Tworzy to przejrzysty asynchroniczny wzorzec żądanie–odpowiedź, który naturalnie współpracuje z async/await zarówno w skrypcie preload, jak i w komponentach React.

Udostępnianie invoke przez contextBridge

Skrypt preload opakowuje wywołania ipcRenderer.invoke i udostępnia je za pośrednictwem contextBridge. Na przykład: api.readFile = (filePath) => ipcRenderer.invoke('read-file', filePath). Renderer wywołuje window.api.readFile(path) i otrzymuje z powrotem Promise — w przejrzysty i izolowany sposób.

Dlaczego renderer nigdy nie importuje ipcRenderer

Przy włączonym contextIsolation proces renderera nie może używać require('electron') ani bezpośrednio importować ipcRenderer — moduł jest po prostu niedostępny. Cała komunikacja IPC musi odbywać się za pośrednictwem udostępnienia przez contextBridge w skrypcie preload. Jest to zamierzone: zapobiega uzyskaniu przez ataki XSS dostępu do IPC.

ipcMain.on: komunikaty bez oczekiwania na odpowiedź

ipcMain.on nasłuchuje jednokierunkowych komunikatów wysyłanych za pomocą ipcRenderer.send (a nie invoke). Nie ma automatycznego kanału odpowiedzi — ten wzorzec nadaje się do powiadomień lub poleceń, w przypadku których renderer nie potrzebuje odpowiedzi, takich jak rejestrowanie zdarzeń lub wywoływanie natywnego powiadomienia.

Przesyłanie danych z procesu głównego do renderera

Proces główny może przesyłać dane do renderera za pomocą webContents.send('channel-name', data). Jest to podstawowy sposób inicjowania komunikacji przez proces główny — na przykład przekazywania zdarzeń obserwowania systemu plików lub działań natywnego menu do interfejsu React.

ipcRenderer.on: nasłuchiwanie w preload

W skrypcie preload funkcja ipcRenderer.on('update', callback) rejestruje nasłuchiwanie komunikatów push z procesu głównego. Funkcja callback otrzymuje zdarzenie oraz wszelkie dane wysłane przez proces główny, które następnie przekazuje się do renderera za pośrednictwem funkcji udostępnionej przez contextBridge.

Udostępnianie nasłuchiwaczy zdarzeń za pośrednictwem contextBridge

Przejrzysty wzorzec obsługi zdarzeń push wygląda następująco: api.onUpdate = (callback) => ipcRenderer.on('update', (_event, data) => callback(data)). Komponenty Reacta subskrybują zdarzenia, wywołując window.api.onUpdate(setData), a funkcja callback aktualizuje stan, gdy proces główny wypchnie nowe dane.

Usuwanie nasłuchiwaczy zdarzeń

Każdy nasłuchiwacz ipcRenderer.on należy usunąć, gdy nie jest już potrzebny, aby zapobiec wyciekom pamięci i wielokrotnemu wywoływaniu funkcji callback. Funkcja w skrypcie preload powinna zwracać funkcję czyszczącą, na przykład () => ipcRenderer.removeListener('update', callback), którą React wywołuje w funkcji zwracanej przez mechanizm czyszczenia useEffect.

Bezpieczeństwo: walidacja danych wejściowych IPC

Dane wejściowe IPC pochodzące z renderera należy traktować jako niezaufane dane w procedurze obsługi procesu głównego. Zawsze należy sprawdzać ścieżki plików, aby zapobiegać atakom typu path traversal, sanityzować parametry zapytań oraz upewniać się, że źródło nadawcy jest oczekiwane. Nigdy nie należy udostępniać ogólnego kanału IPC dla eval lub exec.

Organizowanie kanałów IPC

W miarę rozrastania się aplikacji należy organizować kanały IPC za pomocą konwencji przestrzeni nazw, takich jak: 'fs:read-file', 'db:query', 'window:minimize'. Nazwy kanałów należy przechowywać we wspólnym pliku stałych importowanym zarówno przez main.js, jak i skrypt preload, aby zapobiegać literówkom i bezpieczniej przeprowadzać refaktoryzację.

Wartość zwracana przez ipcMain.handle

Co dzieje się z wartością zwróconą przez procedurę obsługi ipcMain.handle?

Podsumowanie lekcji

IPC stanowi podstawę komunikacji w Electronie. ipcMain.handle i ipcRenderer.invoke tworzą opartą na Promise parę żądanie–odpowiedź dla operacji inicjowanych przez renderer. W przypadku komunikatów push inicjowanych przez proces główny webContents.send i ipcRenderer.on współpracują ze sobą. Cała komunikacja IPC w rendererze musi być kierowana przez contextBridge skryptu preload, a nasłuchiwacze należy zawsze usuwać, aby zapobiegać wyciekom pamięci.

Często zadawane pytania

Czy lekcja „Komunikacja IPC między procesami” jest bezpłatna?

Tak — pełny tekst „Komunikacja IPC między procesami” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Komunikacja IPC między procesami”?

Użyją Państwo ipcMain i ipcRenderer do bezpiecznego przesyłania komunikatów między procesem głównym a rendererem React. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Komunikacja IPC między procesami”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Architektura Electron: proces główny i proces renderera
  2. Konfiguracja Reacta z Electron
  3. Komunikacja IPC między procesami
  4. Pakowanie i dystrybucja na platformy desktopowe
← Powrót do React Academy