2016-09-14 4 views
2

Я использую механизм синхронизации Electrons и async RPC и могу передавать мои данные между процессами довольно хорошо. Тем не менее, теперь мне нужно постоянно отправлять данные событий (немного как приложение чата) в процесс визуализации и обновлять текст.Постоянно передавая события от основного к процессу рендеринга

Возможно ли это внутри электрона? Я предполагаю, что мне нужно создать какой-то слушатель в процессе рендеринга.

ответ

0

Вы можете использовать ipcMain и ipcRenderer.

В основном процессе.

const {ipcMain} = require('electron') 
ipcMain.on('asynchronous-message', (event, arg) => { 
    event.sender.send('asynchronous-reply', 'example message...') 
}) 

В процессе визуализации (веб-страница).

const {ipcRenderer} = require('electron') 

ipcRenderer.on('asynchronous-reply', (event, arg) => { 
    // arg contain your message (example message...) 
}) 
ipcRenderer.send('asynchronous-message', 'example example send to main process') 

Вы также можете передать любой объект.

+0

Спасибо. Будет ли это постоянно получать события в процессе рендеринга, пока основной процесс их отправляет? – user1513388

+0

как поток? – MaximeF

+0

Да - это именно то, что я имею в виду. – user1513388

0

Похоже, что и все. например

Основной процесс:

const ipc = require('electron').ipcMain 

ipc.on('asynchronous-message', function (event, arg) { 
event.sender.send('asynchronous-reply', 'pong') 

function countdown(elementName, minutes, seconds) 
{ 
var element, endTime, hours, mins, msLeft, time; 

function twoDigits(n) 
{ 
    return (n <= 9 ? "0" + n : n); 
} 

function updateTimer() 
{ 
    msLeft = endTime - (+new Date); 
    if (msLeft < 1000) { 
    //element.innerHTML = "countdown's over!"; 
    event.sender.send('asynchronous-reply', 'countdown is over') 
    } else { 
    time = new Date(msLeft); 
    hours = time.getUTCHours(); 
    mins = time.getUTCMinutes(); 
    // element.innerHTML = (hours ? hours + ':' + twoDigits(mins) : mins) + ':' + twoDigits(time.getUTCSeconds()); 
    event.sender.send('asynchronous-reply', (hours ? hours + ':' + twoDigits(mins) : mins) + ':' + twoDigits(time.getUTCSeconds())); 
    setTimeout(updateTimer, time.getUTCMilliseconds() + 500); 
    } 
} 

// element = document.getElementById(elementName); 
endTime = (+new Date) + 1000 * (60*minutes + seconds) + 500; 
updateTimer(); 
} 
countdown("countdown", 1, 5); 
}) 

Renderer процесса:

const {ipcRenderer} = require('electron') 

ipcRenderer.on('asynchronous-reply', (event, arg) => { 
// arg contain your message (example message...) 
}) 
ipcRenderer.send('asynchronous-message', 'example example send to main process') 

 Смежные вопросы

  • Нет связанных вопросов^_^