当前位置: 首页 > 知识库问答 >
问题:

electron 中如何做到实时通信(1、主进程和渲染进程实时通信;2、react和渲染进程实时通信)?

秦斌
2023-05-15

我想要实现一个:
react 调用nodejs ping 功能,让后实时与Ping模块程序通信,进行得到的结果展示在react界面上,这个解决方案应该如何做呢?

1、是否在渲染进程中执行最好?(不再经过Ipc通信,效率会更加高)
2、如果在渲染进程中做,那么如何实现实时通信呢?
3、如果通过ipc通信,让主进程执行ping 命令,那么ipc如何才能进行实时地通信呢?

例如,每得到一个reply,就主动推送一条信息:

% ping baidu.com 
PING baidu.com (39.156.66.10): 56 data bytes
64 bytes from 39.156.66.10: icmp_seq=0 ttl=48 time=40.713 ms
64 bytes from 39.156.66.10: icmp_seq=1 ttl=48 time=44.076 ms
64 bytes from 39.156.66.10: icmp_seq=2 ttl=48 time=39.497 ms
64 bytes from 39.156.66.10: icmp_seq=3 ttl=48 time=46.315 ms
64 bytes from 39.156.66.10: icmp_seq=4 ttl=48 time=53.851 ms
64 bytes from 39.156.66.10: icmp_seq=5 ttl=48 time=40.669 ms
64 bytes from 39.156.66.10: icmp_seq=6 ttl=48 time=42.407 ms
64 bytes from 39.156.66.10: icmp_seq=7 ttl=48 time=48.937 ms
64 bytes from 39.156.66.10: icmp_seq=8 ttl=48 time=52.003 ms
64 bytes from 39.156.66.10: icmp_seq=9 ttl=48 time=44.984 ms

共有1个答案

有凯泽
2023-05-15

主进程中:

const { ipcMain } = require('electron');

ipcMain.on('ping', (event, args) => {
  // 执行 ping 命令
  const result = runPing(args);
  event.sender.send('pingResult', result);
});

渲染进程中:

const { ipcRenderer } = require('electron');

// 发送 ping 请求
ipcRenderer.send('ping', 'www.example.com');

// 接收 ping 结果
ipcRenderer.on('pingResult', (event, result) => {
  console.log('ping 结果:', result);
});

React:

import React, { useState, useEffect } from 'react';
const { ipcRenderer } = window.require('electron');

function PingComponent() {
  const [pingResult, setPingResult] = useState('');

  useEffect(() => {
    ipcRenderer.on('pingResult', (event, result) => {
      setPingResult(result);
    });

    return () => {
      ipcRenderer.removeListener('pingResult', () => {});
    };
  }, []);

  const handlePing = () => {
    ipcRenderer.send('ping', 'www.example.com');
  };

  return (
    <div>
      <button onClick={handlePing}>Ping</button>
      <p>{pingResult}</p>
    </div>
  );
}

export default PingComponent;
 类似资料:
  • remote模块是一种渲染器进程(网页)和主进程之间通信(IPC)的简单方法。 进程: 渲染进程​ 在Electron中,GUI相关模块(例如 dialog, menu等)只能用在主进程而非渲染器进程中使用。 为了从渲染器进程使用它们, ipc模块是向主进程发送进程间消息所必需的。 remote模块可以调用主进程对象的方法,而类似于Java的RMI无需显式地发送进程间消息。 从渲染器进程创建浏览器

  • Electron中如何让主进程和渲染进程之间进行即时通信呢? 我查验到: electron 通信 有4种方式: 但是没有说过有即时通信的使用说明。

  • 从渲染进程到主进程的异步通信 进程: 渲染进程​ ipcRenderer模块是EventEmitter类的一个实例。 它提供了几个方法,所以你可以从渲染进程(网页)发送同步和异步消息到主进程。您还可以从主流程接收回复。 事件方法 ipcRenderer.on(channel, listener) 用途:监听 channel,并调用 listener(event, args...) 处理新消息 ch

  • 在主进程中处理由渲染进程发起的异步通信. 进程: 主进程​ ipcMain 模块是类EventEmitter类的一个实例. 浅显的打个比方,渲染进程给主进程挂个号,这里就开始忙活起来.当然,你也可以从主进程中向渲染进程发送消息. 发送消息 如果从主进程向渲染进程发送消息,请查看 web-contents-send​ 发送消息,事件名为 channel. 回应同步消息, 请设置 event.retu

  • 由于 Electron 使用 Chromium 显示网页,那么,Chromium 的多进程架构也被使用。Electron 中的每个网页都在自己的进程中运行,称为渲染器进程 (renderer process)。 在正常的浏览器中,网页通常运行在沙盒封装化的环境中,并且不允许访问本机资源。然而,Electron 用户有权在网页中使用 Node.js 的 API,从而允许较低级别的操作系统交互。 选自

  • 问题内容: Java上下文中的线程和进程之间有什么区别?用Java如何实现进程间通信和线程间通信?请给我指出一些现实生活中的例子。 问题答案: 根本的区别是线程位于相同的地址空间中,而进程位于不同的地址空间中。这意味着线程间通信是关于传递对对象的引用以及更改共享对象,而进程是关于传递对象的序列化副本。 在实践中,Java线程间通信可以实现为对共享对象进行简单的Java方法调用,并引入适当的同步。或