不断将事件从主进程传递到渲染器进程

时间:2016-09-14 14:11:25

标签: ipc main electron renderer

我一直在使用Electrons同步和异步RPC通信机制,并且可以很好地在进程之间传递我的数据。但是,我现在需要不断地向渲染器进程发送事件数据(有点像聊天应用程序)并更新一些文本。

这可能在电子中吗?我猜我需要在渲染器过程中创建一些监听器。

2 个答案:

答案 0 :(得分:0)

您可以使用ipcMainipcRenderer

在主要过程中。

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')

你也可以传递任何物体。

答案 1 :(得分:0)

看起来确实如此。 e.g。

主要流程:

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 );
})

渲染器流程:

 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')