为什么套接字之间的数据传输需要很多时间

Why does datatransfer between sockets takes lot of time?

本文关键字:时间 数据传输 套接字 之间 为什么      更新时间:2023-09-26

我实现了一个基于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-14秒。看到这一点,我至少期望数据传输速度更快,速率至少为2-3 Mbps。

插座。IO支持发送/接收二进制数据,因此利用它将允许您避免昂贵的数据编码。

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