我在使用此代码下载文件授权后使用的节点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使用任务繁重所以需要更好的解决/想法?