Фреймворк Electron от Github - отличный инструмент, позволяющий быстро и легко создавать кроссплатформенные настольные приложения. Он работает на движке Google Chromium и предоставляет нам хорошие возможности клиентских и серверных процессов Javascript. Хотя у него есть свои недостатки, на мой взгляд, хорошее намного перевешивает плохое, поскольку позволяет веб-разработчикам быстро переходить на нативную разработку, сохраняя при этом те веб-технологии, которые им нравятся: HTML, CSS и JavaScript. Существует множество руководств, которые помогут вам настроить очень простое электронное приложение, но когда вы начнете переходить к созданию более глубоких приложений, вам понадобятся знания модулей Ipc.

Давайте начнем

Обычно, когда вы начинаете, у вас есть два файла Javascript в вашем приложении Electron. Сначала у вас есть ваш main.js, который похож, но никоим образом не эквивалентен серверу в веб-коде, и у вас есть ваш app.js, который похож на код на стороне клиента. Что делают модули IPC, так это отправляют информацию между вашим main.js и вашими различными файлами на стороне клиента, которыми в нашем случае является просто единственный app.js. Первое, что мы хотим сделать, это включить каждый модуль в наш код. Поскольку Electron работает на узле, нам разрешено запрашивать вещи напрямую, без таких модулей, как browserify. В коде на стороне вашего клиента требуется рендерер ipc:

var ipcRenderer = require(‘electron’).ipcRenderer; 

Затем в файле main.js напишите:

var ipcMain = require(‘electron’).ipcMain;

Мы можем потребовать только ipc в обоих местах, но это упрощает понимание кода.

Отправка и получение данных

Допустим, нам нужно запустить некоторые дочерние процессы в электронном виде на основе случайного ввода пользователя. Нам нужно будет настроить несколько прослушивателей событий на стороне клиента и запустить дочерний процесс в основном файле. В нашем рендерере мы можем настроить своего рода прослушиватель событий, используя ванильный Javaascript, jQuery или что-то еще, а затем написать:

ipc.send(‘user-data’, data);

который будет асинхронно отправлять данные в ваш основной процесс с тегом user-data. Этот тег может быть любым. Если по какой-либо причине вы хотите отправлять информацию синхронно, просто замените ipc.send на ipc.sendSync. Затем в вашем основном процессе вы должны настроить прослушиватель событий, который будет проверять, отправил ли ваш рендерер какую-либо информацию. Ты можешь написать:

ipc.on(‘user-data’, function(event, arg) {
  console.log(arg);
  //do child process or other data manipulation and name it manData
  event.sender.send(‘manipulatedData’, manData);
});

Этот фрагмент прослушивает «пользовательские данные», которые были отправлены вашим средством визуализации, и позволяет вам манипулировать и использовать данные. Во многих случаях этого недостаточно. Мы хотим отправить конечный продукт наших манипуляций с данными или, в данном случае, дочерний процесс, и позволить пользователю увидеть его. Мы делаем это, отправляя эти новые данные обратно нашему рендереру с помощью event.sender.send. Опять же, имя тега не имеет значения. Наконец, мы хотим настроить прослушиватель на рендерере, который будет получать обрабатываемые данные и отображать их для пользователя.

ipc.on(‘manipulatedData’, function(arg) { 
  console.log(arg); 
  //Display data
});

Есть и другие прослушиватели событий, которые немного более детализированы, но каждый из них выполняет несколько иную версию того же, что я подробно описал выше.