为什么套接字之间的数据传输需要花费大量时间?

时间:2016-09-08 16:13:21

标签: javascript node.js sockets client-server

我已经实现了基于Web的客户端 - 服务器系统。目标是通过套接字向服务器请求图像文件。

这是我在客户端的代码。 [嵌入式Javascript代码]

 <a id="downloadLnk" download="new.jpeg" style="color:red">Download as image</a>

 var socket = io("ipaddress");
socket.on("image", function(info) {
if (info.image) {
var end1 = new Date().getTime();
document.getElementById("demo1").innerHTML = end1; 
var img = new Image();
img.src = 'data:image/jpeg;base64,' + info.buffer;  
}

function download() {
this.href = img.src;
};
downloadLnk.addEventListener('click', download, false);
});

这是服务器端的代码:[node.js server,express module,fs module]

io.on('connection', function(socket){
var start1 = new Date().getTime();
console.log(start1);

fs.readFile(__dirname + '/aorta-high512.jpg', function(err, buf){
socket.emit('image', { image: true, buffer: buf.toString('base64') });
});   
});

我正在传输尺寸为88KB的512x512分辨率图像,大约需要一秒钟。类似地,对于259KB文件,它需要大约1.2s和2MB文件需要2.5s。我不明白为什么花这么多时间? 我在speedtest.net上检查了我的网络带宽,可用的网速。下载速度为95.97Mbps,上传速度为23.30Mbps。

请您告诉我,为什么数据传输时间太慢?有没有其他方法以更快的方式传输数据?我当然知道96Mbps是可用的带宽,但仍然要测试我从互联网上下载了一个100Mb的pdf文件花了大约12-14s。看看这个,我至少期望以至少2-3 Mbps的速度更快地传输数据。

1 个答案:

答案 0 :(得分:1)

Socket.IO支持发送/接收二进制数据,因此利用它可以避免昂贵的数据编码。

其次,在浏览器中生成/使用数据URL时,您必须小心URL长度。许多浏览器对此类数据URL的最大大小施加了各种限制。一种可能的解决方法(不包括直接通过HTTP GET提供图像)可能包括让服务器将图像分割成一组较小的图像,然后将其与堆叠的img标记一起使用以提供单个图像的外观图像。