如果我的上一个问题不清楚,我这次会更具描述性和清晰度:
我用C ++编写了一个收集器代码,并将其编译为可执行二进制文件。 此收集器从各种服务器收集数据并将这些数据写入文件。
数据流到我的收集器代码的速度是10 Gbps,速度只有数据写入文件。
现在我被要求从Web UI启动这个二进制文件。这意味着点击Web UI我的二进制文件应该开始运行。并且它一直运行到生命周期,直到手动将其进程从命令行中删除。
我不是UI开发人员,所以请有人建议我如何实现这一目标。
我听说过Node.js,但是对于节点j,我无法运行我的二进制文件。
由于数据以10 Gbps的速度流动,因此涉及高I / O,因此我不会冒任何缓慢的风险。
答案 0 :(得分:2)
使用node.js在服务器端运行可执行文件就像调用child_process.spawn()
一样简单。
您可能希望将收集器生成的文件的内容推送到客户端,
可以通过使用fs.watch
和Readable Stream来读取文件来实现。您可以使用socket.io
向客户广播数据。
更新以下是使用express.js的简单实现。
/**
* 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');