如何在节点js中获得客户端下载速度

时间:2017-06-07 11:01:38

标签: javascript node.js

我在使用此代码下载文件授权后使用的节点js中构建服务器:

app.get('/file/:user/:pass', function(req, res) {
                            /* HEADER */
                            res.writeHead(200, {
                                'Content-Disposition': 'attachment;filename='+stream+'.ts',
                                'Content-Type': 'video/mp2t',
                                'Cache-Control': 'no-cache'
                            });

/* GET - last  file */

fs.readFile('/root/myfile.ts', 'utf-8', function(err, data) {

       /* WRITE - stream to RAM */
       buffer[stream] =(fs.readFileSync('/root/myfile.ts'));

      /* STREAM - client */
      res.write(buffer[stream]);
});

这是使用http协议将流媒体文件中的代码剪切到客户端...我需要从服务器获取客户端下载速度,那么有人知道如何获得下载速度吗?

第一个想法是使用setTimeOut函数,它是每秒读取发送到客户端的读取字节...这不好,因为如果我有10 000个用户读取文件,它将有10 000个setTimeOut事件,CPU使用率将是非常高......有没有人有想法或示例代码如何获得下载速度?

例如:

var client_speed = req.connection.readBytes;

然后将readBytes转换为Mbps ...还是有节点函数或libaray在执行res.write函数时自动计算或获取客户端下载速度?

编辑问题:

我尝试使用:

console.log(req.connection._bytesDispatched);
res.write之前的

,我在控制台值中得到每一秒:

0
2270157
4613211

所以我每隔一个字节发送这个好主意是为了计算Mbps上传速度吗?我有1秒钟发送2270157个字节...所以计算将是:

2270157 / 1000000 = 2,27 Mbit/s

然后:     4613211 - 2270157 = 2343054/1000000 = 2,34 Mbit / s

,因为 1字节= 8.0×10-6兆位

这是正确的卡路里吗?还有更好的方法吗?我认为这将是cpu使用任务繁重所以需要更好的解决/想法?

0 个答案:

没有答案