1

如果我的最后一个问题不清楚,这次我将更加描述和明确:

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

数据流向我的收集器代码的速度为 10 Gbps,在这种速度下,只有数据写入文件。

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

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

我听说过 Node.js,但是使用 node js 我无法运行我的二进制文件。

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

4

1 回答 1

3

在服务器端运行可执行文件就像调用child_process.spawn().

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

这可以通过使用Readable Stream读取文件fs.watch来实现。您可以使用将数据广播给客户端。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');
于 2013-09-13T09:45:40.823 回答