3

私が取り組んでいる気の利いたアプリを手に入れました。次に、アプリ自体によってセッションごとに生成されるインバウンド/アウトバウンドトラフィックの量を知りたいいくつかのシナリオを計算します。これにはブラウザを使用したくありませんが、サーバー側からその情報を収集します。

nodejs net.serverには、説明に適合するメソッドがありません。net.socketメソッドのみが見つかりました。

socket.bytesRead受信したバイト数。

socket.bytesWritten送信されたバイト数。

それらはnet.serverを介して生成されたトラフィックに適用されますか?その種の統計を収集する既存のnode_modulesはありますか?

前もって感謝します

4

1 に答える 1

4

まあ、それnet.serverはを使用しているからnet.socketです。合計を取得するには、ソケットが閉じられたら、合計にとを追加する必要がありbytesReadます。bytesWritten例:

const net = require("net");

var server = net.createServer(function (c) {
    c.on('close', function () {
        // add to the totals
        server.bytesSent += c.bytesWritten;
        server.bytesReceived += c.bytesRead;
    });

    c.write('Hello world!\r\n');
    c.pipe(c);
    c.end();
});

server.bytesReceived = 0;
server.bytesSent = 0;

server.listen(3000);

var time = process.hrtime();
setInterval(function (){
    process.stdout.write('\u001B[2J\u001B[0;0f');
    var diff = process.hrtime(time)[0] + process.hrtime(time)[1]/1000000000;
    var bpsSent = Math.round(server.bytesSent/diff) || 0;
    var bpsReceived = Math.round(server.bytesReceived/diff) || 0;
    console.log("Running node.js %s on %s-%s", process.version, process.platform, process.arch);
    console.log("Memory usage: %d bytes", process.memoryUsage().rss);
    console.log("Uptime: %ds", Math.round(process.uptime()));
    console.log("Open connections: %d", server.connections);
    console.log("In: %d bytes (%d bytes/s)", server.bytesReceived, bpsReceived);
    console.log("Out: %d bytes (%d bytes/s)", server.bytesSent, bpsSent);
}, 100);

リアルタイムで(データの送受信時に)合計を更新する必要がある場合は、代わりに、書き込み/読み取り時にバッファーの長さを合計に直接追加できます。これは、ソケットが長時間開いていて、大量のデータを転送している場合に特に便利です。

var server = net.createServer(function (c) {
    var oldWrite = c.write;
    c.write = function(d) {
        if (!Buffer.isBuffer(d)) {
            d = new Buffer(d);
        }
        oldWrite.call(this, d);
        server.bytesSent += d.length;
    };

    c.on('data', function(d){
        server.bytesReceived += d.length;
    });

    c.write('Hello world!\r\n');
    c.pipe(c);
    c.end();
});
于 2013-01-04T20:41:30.347 に答える