node.js - 如何在节点js子进程中进行多线程
问题描述
我有一个使用唯一 ID 多次调用的 bash 脚本,并且我使用套接字 io在 stdout 函数上发送消息
shell 脚本包含两个动作:
- 行动1
- 行动2
Action2 是一个后台进程,所以我不想等待脚本完成,所以当 Action1 完成时,我打印回显消息(msg),我将在 stdout 函数中捕获它,然后我在 stdout 中发送套接字 io 消息功能
服务器.js
child_process = exec('bash some-file.sh arg1 arg2')
child_process.stdout.on('data', function) {
if ((data).indexOf(msg) > 1) {
io.sockets.emit('Completed for id: ' + id)
}
});
上述代码的问题是,当我多次调用上述操作时,它不适用于第二次迭代(即 id 1 仍然存在),因为后台操作 (Action2) 仍在后台为 id 1 运行。
如何在 child_process 上进行多线程处理?
解决方案
您可以使用child_process.fork
和发送来自子流程的消息(Actions2)
main.js
const child_proc = require('child_process');
const sub = child_proc.fork(`${__dirname}/sub.js`);
sub.on('message', (m) => {
console.log('PARENT got message:', m);
});
sub.send({ from: 'server' });
子.js
process.on('message', (m) => {
console.log('CHILD got message:', m);
});
process.send({ from: 'client' });
推荐阅读
- android - 较新的 Lottie 文件不适用于 Android 上的 React Native?如何导出为旧版?
- perl - 记忆一个 XML 解析函数会破坏它
- sql - 尝试将值插入表中,其中一些值将是选择语句,而其他值将是硬编码的
- matlab - 在 MATLAB 中将 3D 矩阵重塑为 4D 矩阵
- javascript - 在函数调用上反应无限循环
- javascript - ReactRouterDom, AuthRoute 返回反应渲染函数作为反应子警告无效
- php - 在 3 列中显示字母查询
- javascript - Leaflet - 使用 Leaflet-Geoman 插件选择多个 geoJSON 多边形特征
- openedge - Progress-4gl:事务范围如何应用于外部程序调用?
- eclipse - 如何更改我的 Espressif-IDF 项目在 Eclipse 中使用的文件的路径:?