测量Node.js通过net.server生成的总入站/出站stream量

我得到了我工作的漂亮的应用程序,现在计算一些场景,我想知道应用程序本身每个会话产生多less入站/出站stream量。 我不想使用浏览器,但从服务器端收集信息。

nodejs net.server没有任何符合描述的方法,我发现只有net.socket方法:

socket.bytesRead接收到的字节数量。

socket.bytesWritten发送的字节数量。

它们是否适用于通过net.server生成的stream量? 任何现有的node_modules收集这种统计信息?

提前致谢

那是因为net.socket使用net.socket 。 为了得到总数,一旦套接字closures,你将不得不添加bytesReadbytesWritten到总数。 例:

 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(); });