是否可以在 nodejs 进程和 Electron 子进程之间进行通信?

Is it possible to comunicate between a nodejs process and a Electron child process?

我有一个在我的主 nodejs 应用程序中启动的 Electron 应用程序。用户必须启动我的 index.js,然后 Electron window 产生。问题是我无法在这两个进程之间进行通信。

我正在使用 spawn,因为 fork 不适用于 Electron。 Child.send 不起作用。它什么都不做。

在我的 index.js:

let { spawn } = require("child_process")
let electron = spawn(require("electron"), ["."], {"detached": false, "cwd": "D:\code\electron_app", "env": {"some": JSON.stringify(["process", "env"])})
electron.send(JSON.stringify({
   message: "some message"
}))
electron.on("close", (code) =>{
   process.exit(code)
})
electron.on("exit", (code) => {
   process.exit(code)
})
electron.stdout.pipe(process.stdout)
electron.stdio.pipe(process.stdio)
electron.stdin.pipe(process.stdin)
electron.stderr.pipe(process.stderr)

在我的 main.js 电子应用中:

const {app, BrowserWindow} = require('electron')
let win = null

process.on("message", console.log)
//I haven't put all functions here

这没有任何作用。 Electron 应用程序正在启动,但未发送消息。甚至没有错误。不知道有没有其他的办法。

Spawn 不支持 fork 支持的 IPC 通道(您正在尝试使用)。您将需要找到另一种与进程通信的方法,可能是通过 TCP 的方式(您可以使用某些 RPC 实现或启动 HTTP 服务器来侦听目标进程中的请求)

事实是,尽管 NodeJs 正在生成电子进程,但一旦新进程(在本例中为电子 window 进程)生成,它就对父进程(在本例中为 NodeJs)变得完全陌生直到它完成(成功或错误)并且 return 父进程。所以不要在IPC上中继。

我假设这样一个事实,即 NodeJs 不适合 CPU 密集型任务,因此您想生成一些 CPU 密集型任务(现在在同一台服务器上,但稍后在一些无服务器架构上)。

只需通过 API 个端点进行通信即可。

在 NodeJs 中开发所需的 REST 端点并在 electron window 进程中调用相同的端点,如果两者在同一服务器上,则在 localhost:port 从子进程请求。

如果以上没有帮助,请在用户体验级别分享您的问题陈述(您想要显示什么/如何显示)。

您可以将 ipcspawn 一起使用。 fork 自动执行此操作。

看这里:https://github.com/juliangruber/electron-stream/blob/4fefd22553b0f2bea5bca3e2d00846b96acdcb74/index.js#L87-L89

spawn(electron, args, {
  stdio: [null, null, null, 'ipc']
});

ps.send('foo')

ps.on('message', (msg) => {})