ipc - NW.js 在孩子中接收消息不起作用?
问题描述
我在 nw.js 中有以下代码:
服务器:
log_fd = fs.openSync("./logs/child.txt", "a");
let cwd = path.resolve(process.cwd());
child = spawn(
'/Users/fl/nwjs-sdk-v0.50.1-osx-x64/nwjs.app/Contents/MacOS/nwjs',
[
"--no-first-run",
"--enable-node-worker",
"--enable-logging=stderr",
"--user-data-dir=/tmp/" + Date.now(),
"--ignore-certificate-errors",
"--ignore-urlfetcher-cert-requests",
"--window-size=500,500",
"--host-rules=MAP *." + domain + " 127.0.0.1:" + portno,
"."
],
{
stdio: ['pipe', log_fd, log_fd, 'ipc'],
cwd: cwd + '/binary'
}
);
let res = child.stdin.write('ARGS: test ' + domain + ' ' + portno); //try write via stdin
console.log('Send to child proc ', res)
let res2 = child.send('Via IPC'); //try write via IPC send method, as IPC channel should be opened
客户:
process.on('uncaughtException', function (e) {
console.group('Node uncaughtException');
if (!!e.message) {
console.log(e.message);
}
if (!!e.stack) {
console.log(e.stack);
}
console.log(e);
console.groupEnd();
});
console.log('Wait for msg - gets printed')
process.stdin.on('data', (data) => {
console.log(data)
}
process.on('message', data => {
console.log('GOT FROM IPC ', data)
})
console.log('CHild here - this gets printed')
孩子package.json
:
{
"name": "child_proc",
"main": "index.js",
"dependencies": {
"body-parser": "^1.19.0",
"ejs": "^3.1.5",
"express": "^4.17.1"
}
}
服务器能够产生子
节点相同的代码在 node.js 中工作,通过IPC
和pipe
机制,如您所见,我在这里使用了两者,也使用了其中一个,但子节点不接收消息。
孩子只是坐在那里并没有退出(我认为是由于 nw.js)。和的
子输出被重定向到stdout
stderr
log_fd
这是(几乎)在 Node.js 中工作的相同代码:
服务器:
const path = require('path');
const fs = require('fs');
const spawn = require('child_process').spawn;
const program = path.resolve('child_node.js');
let cwd = path.resolve(process.cwd());
const file_d = fs.openSync("/tmp/kkt.txt", "a");
const options = {
stdio: ['pipe', file_d, file_d, 'ipc'],
cwd
};
const child = spawn('node', ['child_node.js'], options);
child.stdin.write('Hello via stdin');
child.send('Hi');
child.on('message', message => {
console.log('message from child:', message);
});
孩子:
process.on('message', message => {
console.log('message from parent:', message);
process.send('Hello 2');
});
process.stdin.on('data', message => {
console.log('message from parent stdin:', message);
})
解决方案
推荐阅读
- react-native - 如何使用变量使用 useState 挂钩更改状态
- mongodb - MongoDB 管道聚合中的输出不一致
- regex - <|> 在这个解析器中的顺序真的很重要吗?
- authentication - Google Sheet 联合表的 Tableau Bigquery 访问问题
- apache-flink - 我们可以使用 apache flink 实时生成 pef/excel 文件吗?
- angular - 仅使用 Angular 框架(不是 AngularJS 和中间层)对 Oracle 云进行身份验证
- django - 如何在用户配置文件模型中上传图像,同时与 django rest 框架中的用户模型具有一对一的关系?
- spring - Spring Data JPA 投影集合
- react-native - 如何在本机反应中导航到 BottomTabNavigator 内的另一个导航?
- angular - 如何将图像导入打字稿?他说“找不到模块”