C++ 访问C++;从Web UI编译的可执行二进制文件
如果我的最后一个问题不清楚,那么这次我将更具描述性和清晰性: 我在C++中编写了一个收集器代码,并将其编译为可执行二进制文件。 此收集器从各种服务器收集数据,并将这些数据写入文件 数据流到我的收集器代码的速度为10 Gbps,并且只有数据以这种速度写入文件 现在我被要求从Web UI启动这个二进制文件。这意味着只要单击Web UI,我的二进制文件就会开始运行。它一直运行到生命周期,直到从命令行手动终止其进程 我不是UI开发人员,所以请有人能建议我如何实现这一点 我听说过Node.js,但使用Node js我无法运行二进制文件C++ 访问C++;从Web UI编译的可执行二进制文件,c++,node.js,user-interface,express.js,C++,Node.js,User Interface,Express.js,如果我的最后一个问题不清楚,那么这次我将更具描述性和清晰性: 我在C++中编写了一个收集器代码,并将其编译为可执行二进制文件。 此收集器从各种服务器收集数据,并将这些数据写入文件 数据流到我的收集器代码的速度为10 Gbps,并且只有数据以这种速度写入文件 现在我被要求从Web UI启动这个二进制文件。这意味着只要单击Web UI,我的二进制文件就会开始运行。它一直运行到生命周期,直到从命令行手动终止其进程 我不是UI开发人员,所以请有人能建议我如何实现这一点 我听说过Node.js,但使用No
由于数据以10 Gbps的速度流动,因此涉及到高I/O,因此我不能冒任何缓慢的风险。在服务器端运行可执行文件与调用一样简单 您可能希望将收集器生成的文件内容推送到客户端 这可以通过使用和来读取文件来实现。您可以使用向客户端广播数据
更新下面是一个使用的简单实现
您也没有任何web服务处理客户端请求?服务器必须提供api函数来启动进程,如果进程已启动,则不执行任何操作(如果我理解您的说法正确)所以它不会启动另一个实例并浪费资源。从WebUI启动是指从本地启动还是在某个web服务器上启动?从web UI启动是指它应该像在本地运行一样启动。/collector我只是希望web UI这样做,然后与它没有连接Fardjad——我只是希望它像在运行一样运行从命令行,比如-./collector,我可以用Node.js做类似的事情吗?我不希望Node持有它,或者有任何阻塞,正如我所提到的,速度对我来说也是非常重要的,因为我正在处理10 Gbps的速度。我将尝试使用这个.Fardjad--这会使node的子进程在二进制文件运行之前保持活动状态吗?这个过程的范围是什么?当我从命令行手动终止二进制进程时会发生什么情况?@rakehsinha collector将是节点应用程序的子进程,并将一直运行,直到收集器退出或节点进程退出。如果需要,可以在退出时重新启动子进程。您还可以使用upstart或forever作为守护进程运行节点应用程序,并使其保持活动状态。
/**
* 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');