基于node的net模块实现electron的管道通信

本文介绍了如何利用Node的net模块在 Electron 的主进程和渲染进程中实现命名管道通信,以解决主进程长时间运行导致页面卡顿的问题。通过创建一个服务器来读取文件夹内容,并在主进程中作为客户端进行通信,从而避免了端口占用问题。文章展示了fileDirRead.js、main.js、renderer.js和index.html的关键代码片段,并提到了实施过程中可能遇到的乱码问题。
摘要由CSDN通过智能技术生成

前言

electron分了主进程和渲染进程, 如果在主进程中执行的时间过长会导致页面卡顿,因为主进程管理者渲染器进程,为了优化,做了很多的一个方案:

1. 再开一个BrowserWindow 窗口来处理这些逻辑,设置这个窗口隐藏,然后通过electron内置的ipc进行消息的通讯
2. 利用webWorker来处理这些复杂的逻辑
3. 使用golang等处理业务,打包成exe,使用node的child_process启动exe,通过socket处理
4. 通过的node的fork启动一个node服务来处理逻辑 
...

像1、3、4这种本质上是要开多一个进程去处理,那么进程之间的通信就很重要了,比如socket,ipcRender,ipcMain。

我有个项目就用了socket做了通信,不过用socket做通信可能会遇到端口占用的情况,就是你先跑了socket,然后端口被其他应用占掉,这时注意重新拉起。

命名管道通信

回归正题,现在做一个使用net模块实现electron主进程和node进程的命名管道通信,功能比较简单,就是获取文件夹下所有的文件和文件夹。

这边读取文件夹下所有文件和文件夹作为Server,electron主进程是client

fileDirRead.js:

const net = require("net");
const pipeFile =
  process.platform === "win32" ? "\\\\.\\pipe\\rfpip" : "/tmp/rfpip.sock";
const fs = require("fs");
const path = require("path");
const readDir = (dirPath, arr) => {
   
  const dirs = [];
  const files = fs.readdirSync(dirPath);
  files.forEach((file) => {
   
    const localPath = path.join(dirPath, file);
    if (fs.statSync(localPath).isDirectory()) {
   
      dirs.push(localPath);
    }
    arr.push(localPath);
  });
  while (dirs.length > 0) {
   
    const dir = dirs.shift();
    const parent = dir;
    const files = fs.readdirSync(dir);
    files.forEach((file) => {
   
      const localPath = path.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值