【Electron】vue+electron如何实现进程间的通信

本文详细介绍了在 Electron 中,Vue 应用如何进行渲染进程与主进程之间的通信,包括通过 `ipcRenderer` 和 `ipcMain` 模块的使用方法,以及在 Vue 项目中配置预加载脚本解决 Webpack5 的问题。此外,文章还讨论了 `remote` 和 `shell` 模块的常见配置和注意事项,并提供了封装 `ipcMain` 进行统一管理的方法。

一、前言

本文主要介绍electron渲染进程和主进程间的通信,以及在渲染进程和主进程中常用的配置项。

二、配置内容

1.进程间的通信

渲染进程和主进程间的通信主要通过ipcRendereripcMain这两个模块实现的,其中ipcRenderer是在渲染进程中使用,ipcMain在主进程中使用。

其中,渲染进程使用ipcRenderer有两种方式

第一种方式引入ipcRenderer

这种方式主要是通过Electron窗口的preload方法实现的,以下是实现步骤

首先我们创建一个preload.js文件,把文件放入到public文件中

// preload.js

window.ipcRenderer = require('electron').ipcRenderer; 

之后在主进程中引入

import { BrowserWindow, ipcMain } from 'electron'
let win = new BrowserWindow({width: 800, height: 600,webPreferences: {contextIsolation: false,// eslint-disable-next-line no-undefpreload: __static + '/preload.js'}
})
// 顺便这里放一个主进程的监听
ipcMain.on('pong', (e, args) => {console.log('这里是主进程pong', args)e.sender.send('ping', '你好 我是主进程')
}) 

这样我们就可以再渲染进程直接使用window.ipcRenderer,去监听或发送事件了。

// App.vue

// 渲染进程的监听
window.ipcRenderer.on('pang', (e, arg) => {console.log('渲染进程===我收到啦', arg)
})
// 渲染进程发送事件===这个可以放到一个点击事件里面去触发
window.ipcRenderer.send('ping', '你好呀,我是渲染进程') 

实验结果如下,这里注意主进程的打印是在终端里面输出的

### 如何在 Electron Vue 项目中集成并实现 TCP 客户端或服务器通信 要在基于 ElectronVue 的项目中实现 TCP 客户端或服务器功能,可以利用 Node.js 提供的 `net` 模块来创建和管理 TCP 链接。以下是具体方法: #### 使用 Net 模块构建 TCP 功能 Node.js 自带的 `net` 模块提供了用于建立网络连接的基础工具。可以通过该模块轻松实现 TCP 客户端或服务器。 对于 **TCP Server** 实现: ```javascript const net = require('net'); // 创建一个 TCP server let server = net.createServer((socket) => { console.log('Client connected'); socket.on('data', (data) => { console.log(`Received data from client: ${data}`); socket.write('Data received by the server.'); }); socket.on('end', () => { console.log('Client disconnected'); }); }); server.listen(8080, () => { console.log('Server is listening on port 8080...'); }); ``` 上述代码展示了如何设置一个简单的 TCP 服务器[^1]。它监听来自客户端的数据,并向其发送响应。 对于 **TCP Client** 实现: ```javascript const net = require('net'); let client = new net.Socket(); client.connect(8080, 'localhost', () => { console.log('Connected to server!'); client.write('Hello from the client!'); }); client.on('data', (data) => { console.log(`Received from server: ${data}`); client.destroy(); // 关闭链接 }); client.on('close', () => { console.log('Connection closed'); }); ``` 这段脚本演示了一个基本的 TCP 客户端行为,即连接到指定地址上的服务器、传输数据以及接收反馈。 #### 将此逻辑嵌入至 Electron 应用程序中的主进程 由于 Electron 主进程中可以直接访问完整的 Node.js API 而无需额外配置,因此可以在主进程中引入以上提到的 TCP 处理逻辑。例如,在 main.js 文件里加入这些功能即可完成初始化工作。 另外需要注意的是,如果计划让前端部分(Vue 组件)能够触发某些特定操作或者显示实时状态更新,则可能还需要借助 IPC (Inter-Process Communication)机制来进行跨线程的消息传递。这样可以让渲染器进程知道当前发生的事件并与用户交互[^2]。 #### 前后端分离架构下的注意事项 考虑到实际应用可能会涉及复杂的业务流程处理和服务间协作等问题,建议采用微服务设计理念进行整体规划。像 DIM 系统那样运用 Spring Boot 构建后台接口提供 RESTful Web Service 支持;同时依靠 Kafka 来负责异步消息队列管理和负载均衡优化等高级特性。 最后提醒一点关于 MV* 设计模式的选择上,虽然目前主流趋势偏向于 React 或者 Angular 方面的技术栈迁移,但对于熟悉 Vue 生态圈的朋友来说继续沿用也是完全可以接受的做法。毕竟无论哪种方式最终目标都是为了简化视图层控制逻辑从而提升开发效率[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值