Можно ли установить связь между процессом nodejs и дочерним процессом Electron? - PullRequest
0 голосов
/ 19 мая 2019

У меня есть приложение Electron, которое запускается внутри моего основного приложения nodejs.Пользователь должен запустить мой index.js, а затем появиться окно Electron.Проблема в том, что я не могу общаться между этими двумя процессами.

Я использую 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 моего приложения Electron:

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

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

Это ничего не делает,Приложение Electron запускается, но сообщение не отправляется.Даже без ошибок.Я не знаю, есть ли другой способ сделать это.

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Дело в том, что NodeJs порождают электронный процесс, но как только новый процесс (процесс электронного окна в этом случае) порождает, он становится совершенно незнакомым родительскому процессу (в данном случае NodeJ) до его завершения (успех или ошибка)и вернуть что-то в родительский процесс.Поэтому не ретранслируйте IPC.

Я предполагаю тот факт, что NodeJ не подходит для задач, интенсивно использующих процессор, поэтому вы хотите порождать некоторые задачи, интенсивно работающие с процессором (прямо сейчас на том же самомсервер, но позже на некоторых серверах без архитектуры).

Просто просто обмениваться данными через конечные точки API.

Разработать необходимые конечные точки REST в NodeJ и вызывать их в процессе электронного окна, если обанаходятся на том же сервере, запросите на локальном хосте: порт от дочернего процесса.

Если вышеупомянутое не помогло, пожалуйста, поделитесь своим заявлением о проблеме на уровне UX (что / как вы хотите показать).

0 голосов
/ 19 мая 2019

Spawn не поддерживает канал IPC (который вы пытаетесь использовать), который поддерживает вилка.Вам нужно будет найти другой подход для взаимодействия с процессом, возможно, что-то через TCP (вы могли бы использовать некоторую реализацию RPC или ускорить HTTP-сервер для прослушивания запросов в целевом процессе)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...