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

Posted

技术标签:

【中文标题】不断地将事件从主进程传递到渲染器进程【英文标题】:continuously passing events from main to renderer process 【发布时间】:2017-01-22 09:20:46 【问题描述】:

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

这在电子中可能吗?我猜我需要在渲染器进程中创建某种监听器。

【问题讨论】:

【参考方案1】:

看起来确实如此。例如

主进程:

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

【讨论】:

【参考方案2】:

您可以使用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')

你也可以传递任何对象。

【讨论】:

谢谢。只要主进程正在发送它们,这是否会不断接收渲染器进程中的事件? 像一个流? 是的 - 这正是我的意思。 抱歉,我不知道。我需要检查文档。

以上是关于不断地将事件从主进程传递到渲染器进程的主要内容,如果未能解决你的问题,请参考以下文章

在电子的渲染器进程中使用 npm 模块

在 Electron 中的两个渲染器进程之间直接通信

无法从主进程向 Electron Renderer 进程发送函数

在电子中从 ipcMain 广播消息

深入现代浏览器(第三部分)chrome 渲染器进程的内部工作原理

如何从电子中的渲染器进程调用 preload.js 中定义的函数