从Web UI访问C ++编译的可执行二进制文件

时间:2013-09-13 07:00:30

标签: c++ node.js user-interface

如果我的上一个问题不清楚,我这次会更具描述性和清晰度:

我用C ++编写了一个收集器代码,并将其编译为可执行二进制文件。 此收集器从各种服务器收集数据并将这些数据写入文件。

数据流到我的收集器代码的速度是10 Gbps,速度只有数据写入文件。

现在我被要求从Web UI启动这个二进制文件。这意味着点击Web UI我的二进制文件应该开始运行。并且它一直运行到生命周期,直到手动将其进程从命令行中删除。

我不是UI开发人员,所以请有人建议我如何实现这一目标。

我听说过Node.js,但是对于节点j,我无法运行我的二进制文件。

由于数据以10 Gbps的速度流动,因此涉及高I / O,因此我不会冒任何缓慢的风险。

1 个答案:

答案 0 :(得分:2)

使用在服务器端运行可执行文件就像调用child_process.spawn()一样简单。

您可能希望将收集器生成的文件的内容推送到客户端,

可以通过使用fs.watchReadable Stream来读取文件来实现。您可以使用socket.io向客户广播数据。


更新以下是使用的简单实现。

/**
 * app.js
 * make sure to install express (npm install express)
 * and place the collector executable beside this file
 * or set collectorPath to the correct path.
 * run the app and open 'http://0.0.0.0:3000/start' in your browser.
 */

var child_process = require('child_process');
var path = require('path');
var express = require('express');
var app = express();

var collector = null;

app.get('/start', function (req, res) {
  if (collector !== null) {
    res.end('Collector is already running.');
    return;
  }

  var collectorPath = path.join(__dirname, './collector');
  collector = child_process.spawn(collectorPath, [], {
    stdio: 'ignore'
  });

  collector.on('exit', function (signal, code) {
    console.log('Collector exited with signal: %s and code: %d', signal, code);
    collector = null;
  });

  res.end('Done.');
});

app.listen(3000);
console.log('Listening on port 3000');