Связь между процессами через IPC
Используйте ipcMain и ipcRenderer для безопасной передачи сообщений между основным процессом и процессом визуализации React
«Связь между процессами через IPC» — бесплатный урок React Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
ipcMain.handle: шаблон запроса и ответа
ipcMain.handle регистрирует именованный канал в главном процессе, который отвечает на запросы процесса визуализации. Он принимает асинхронную функцию-обработчик, а её возвращаемое значение становится значением разрешившегося обещания в процессе визуализации, поэтому этот механизм хорошо подходит для таких операций, как чтение файлов или запросы к базе данных.
ipcRenderer.invoke: вызов главного процесса
ipcRenderer.invoke отправляет сообщение по именованному каналу и возвращает обещание, которое разрешается возвращаемым значением обработчика главного процесса. Так создаётся простой асинхронный шаблон запроса и ответа, естественно работающий с async/await как в скрипте предварительной загрузки, так и в компонентах React.
Предоставление invoke через contextBridge
Скрипт предварительной загрузки оборачивает вызовы ipcRenderer.invoke и предоставляет их через contextBridge. Например: api.readFile = (filePath) => ipcRenderer.invoke('read-file', filePath). Процесс визуализации вызывает window.api.readFile(path) и получает обещание — всё просто и безопасно в песочнице.
Почему процесс визуализации никогда не импортирует ipcRenderer
При включённом contextIsolation процесс визуализации не может выполнить require('electron') или напрямую импортировать ipcRenderer — этот модуль просто недоступен. Весь обмен через IPC должен проходить через предоставленный скриптом предварительной загрузки интерфейс contextBridge. Это сделано намеренно: такой подход не позволяет XSS-атакам получить доступ к IPC.
ipcMain.on: сообщения без ответа
ipcMain.on прослушивает односторонние сообщения, отправленные с помощью ipcRenderer.send (а не invoke). Автоматического канала ответа нет, поэтому этот подход подходит для уведомлений или команд, на которые процессу визуализации не нужен ответ, например для регистрации событий или запуска нативного уведомления.
Передача данных из главного процесса в процесс визуализации
Главный процесс может передавать данные процессу визуализации с помощью webContents.send('channel-name', data). Это основной способ, с помощью которого главный процесс инициирует взаимодействие, например пересылает события наблюдения за файловой системой или действия нативного меню интерфейсу React.
ipcRenderer.on: прослушивание в скрипте предварительной загрузки
В скрипте предварительной загрузки ipcRenderer.on('update', callback) регистрирует слушатель сообщений, отправляемых главным процессом. Обратный вызов получает событие и все данные, отправленные главным процессом, после чего Вы передаёте их визуализатору через функцию, предоставленную contextBridge.
Предоставление слушателей событий через contextBridge
Удобный шаблон для событий, отправляемых главным процессом: api.onUpdate = (callback) => ipcRenderer.on('update', (_event, data) => callback(data)). Компоненты React подписываются вызовом window.api.onUpdate(setData), а обратный вызов обновляет состояние, когда главный процесс отправляет новые данные.
Очистка: удаление слушателей событий
Каждый слушатель, зарегистрированный через ipcRenderer.on, необходимо удалить, когда он больше не нужен, чтобы предотвратить утечки памяти и повторные вызовы. Функция предварительной загрузки должна возвращать функцию очистки, например () => ipcRenderer.removeListener('update', callback), которую React вызывает из функции очистки useEffect.
Безопасность: проверка входных данных IPC
Входные данные IPC от визуализатора следует считать недоверенными данными в обработчике главного процесса. Всегда проверяйте пути к файлам, предотвращая атаки обхода путей, очищайте параметры запросов и проверяйте, что источник отправителя является ожидаемым. Никогда не предоставляйте универсальный IPC-канал для eval или exec.
Структурирование каналов IPC
По мере роста приложения организуйте каналы IPC с помощью соглашений об именовании: 'fs:read-file', 'db:query', 'window:minimize'. Храните имена каналов в общем файле констант, который импортируют и main.js, и скрипт предварительной загрузки, чтобы предотвращать опечатки и сделать реорганизацию кода безопаснее.
Возвращаемое значение ipcMain.handle
Что происходит со значением, возвращённым обработчиком ipcMain.handle?
Итоги урока
IPC — основа обмена данными в Electron. ipcMain.handle и ipcRenderer.invoke образуют пару запрос–ответ на основе Promise для операций, инициированных визуализатором. Для отправки данных главным процессом webContents.send и ipcRenderer.on работают вместе. Все операции IPC в визуализаторе должны проходить через contextBridge скрипта предварительной загрузки, а слушатели следует всегда удалять, чтобы предотвратить утечки памяти.
Изучай React с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 88
- Уроки
- 324
Часто задаваемые вопросы
Урок «Связь между процессами через IPC» бесплатный?
Да — полный текст урока «Связь между процессами через IPC» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Связь между процессами через IPC»?
Используйте ipcMain и ipcRenderer для безопасной передачи сообщений между основным процессом и процессом визуализации React Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Связь между процессами через IPC»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Архитектура Electron: основной процесс и процесс визуализации
- Настройка React с Electron
- Связь между процессами через IPC
- Сборка и распространение для настольных платформ