Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问C++;从Web UI编译的可执行二进制文件_C++_Node.js_User Interface_Express.js - Fatal编程技术网

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

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

如果我的最后一个问题不清楚,那么这次我将更具描述性和清晰性:

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

数据流到我的收集器代码的速度为10 Gbps,并且只有数据以这种速度写入文件

现在我被要求从Web UI启动这个二进制文件。这意味着只要单击Web UI,我的二进制文件就会开始运行。它一直运行到生命周期,直到从命令行手动终止其进程

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

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


由于数据以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');