Electron framework на Github е страхотен инструмент за хората да създават настолни приложения за различни платформи бързо и лесно. Той се захранва от двигателя Chromium на Google и ни дава добри части от клиентските и сървърните процеси на 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 и на двете места, но това прави кода лесен за разбиране.

Изпращане и получаване на данни

Да кажем, че трябва да изпълним някои дъщерни процеси в electron въз основа на произволен потребителски вход. Ще трябва да настроим някои слушатели на събития от страна на клиента и да стартираме дъщерния процес на основния файл. В нашия рендър можем да настроим някакъв слушател на събития, използвайки ванилен 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
});

Има други слушатели на събития, които са малко по-нюансирани, но всеки прави малко по-различна версия на същото, което описах по-горе.