1

私の最後の質問が不明確だった場合、今回はより説明的で明確になります。

C++ で Collector コードを作成し、実行可能なバイナリとしてコンパイルしました。このコレクターは、さまざまなサーバーからデータを収集し、それらのデータをファイルに書き込みます。

コレクター コードへのデータ フローの速度は 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 に答える