我想将信息从nodejs传输到Linux平台上运行的嵌入式C ++应用程序。这可能吗?
主程序是用C ++编写的,而软件更新程序(Node JS)是一个独立的应用程序,它是从主C ++程序调用的。
我想解释一下将要发生数据传输的环境。它如下:
这种数据传输是否可行?
由于
答案 0 :(得分:1)
好吧,有些问题:
主应用如何将数据传输到节点应用?参数?环境变量? HOw节点将数据返回给主应用程序? Stdout?一些RPC?共享记忆,消息队列?
有很多方法可以帮助你
任何方式,一个可行的简单例子
主应用程序调用节点应用程序,例如Argument" MakeTheSOARequest"
node app "makeTheSOARequest"
节点拨打电话并将结果打印到新文件,然后退出
主应用程序读取文件,执行商务并再次调用节点应用程序 带参数
node app --download swudtae1, swupdate2 .. swupdateN
节点应用程序下载所需文件并退出
答案 1 :(得分:1)
人们建议奇怪的方式来传输数据(我的意思是,共享内存,认真的?IPC消息队列?来吧)。在这种情况下传递数据最明显的方法是使用命令行参数和标准输出。
以下是假冒获取和下载更新的Node应用程序的示例。如果不带参数调用,它将获得可用更新并在标准输出上打印它们。如果使用参数调用,则会下载指定为参数的更新。
主要应用程序是一个简单的shell脚本(但您可以从C,C ++或任何其他允许您运行外部程序的语言调用Node程序)。它首先运行Node应用程序以获取可用更新,然后它只选择前两个,然后再次运行Node应用程序以下载这两个更新。
getUpdates()
和downloadUpdates()
是返回示例数据的模型,但您可以在其中执行任何操作以返回实际数据。
#!/usr/bin/env node
'use strict';
function getUpdates() {
return new Promise((res, rej) => {
console.error('Getting available updates ...');
setTimeout(() => {
var updates = ['update1', 'update2', 'update3'];
console.error('Available updates:', updates.join(', '));
res(updates);
}, 1000);
});
}
function downloadUpdates(list) {
return new Promise((res, rej) => {
console.error('Downloading updates:', list.join(', '));
setTimeout(() => {
console.error('Download complete.');
res();
}, 3000);
});
}
if (process.argv.length < 3) {
getUpdates()
.then(updates => {
updates.forEach(i => console.log(i));
process.exit(0);
})
.catch(err => {
console.error('Error:', err);
process.exit(1);
});
} else {
var updates = process.argv.slice(2);
downloadUpdates(updates)
.then(() => {
process.exit(0);
})
.catch(err => {
console.error('Error:', err);
process.exit(1);
});
}
#!/bin/bash
echo GETTING AVAILABLE UPDATES
available=(`./nodeapp.js`)
echo GOT AVAILABLE
wanted="${available[0]} ${available[1]}"
echo TRYING TO DOWNLOAD: $wanted
./nodeapp.js $wanted && echo DONE || echo ERROR
shell脚本以大写形式打印所有内容,使其可见哪个程序打印哪条消息。运行./mainapp.sh
的结果是:
GETTING AVAILABLE UPDATES
Getting available updates ...
Available updates: update1, update2, update3
GOT AVAILABLE
TRYING TO DOWNLOAD: update1 update2
Downloading updates: update1, update2
Download complete.
DONE
没有IPC,没有共享内存,没有TCP,UDP或Unix套接字。只是简单的旧论点和stdout。