将数据从NodeJS传输到C ++应用程序

时间:2016-09-20 15:05:56

标签: c++ node.js node.js-addon

我想将信息从nodejs传输到Linux平台上运行的嵌入式C ++应用程序。这可能吗?

主程序是用C ++编写的,而软件更新程序(Node JS)是一个独立的应用程序,它是从主C ++程序调用的。

我想解释一下将要发生数据传输的环境。它如下:

  1. 主C ++应用程序调用独立的NodeJS应用程序
  2. Node JS进行SOAP调用并从Web
  3. 获取可用的s / w更新名称
  4. 然后将名称传递给主应用程序,主应用程序(用户)选择要下载的软件更新。
  5. Node JS然后下载软件更新并退出。
  6. 这种数据传输是否可行?

    由于

2 个答案:

答案 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()是返回示例数据的模型,但您可以在其中执行任何操作以返回实际数据。

nodeapp.js

#!/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);
    });
}

mainapp.sh

#!/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。