我已经实现了基于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的速度更快地传输数据。
答案 0 :(得分:1)
Socket.IO支持发送/接收二进制数据,因此利用它可以避免昂贵的数据编码。
其次,在浏览器中生成/使用数据URL时,您必须小心URL长度。许多浏览器对此类数据URL的最大大小施加了各种限制。一种可能的解决方法(不包括直接通过HTTP GET提供图像)可能包括让服务器将图像分割成一组较小的图像,然后将其与堆叠的img
标记一起使用以提供单个图像的外观图像。