我使用 zlib 来压缩我的文件,压缩后我看不到它的大小发生重大变化,我试图通过套接字改善传输速度,所以我试图在通过套接字发送文件之前压缩文件。
我使用以下代码压缩文件:
int compress_file(char *infilename, char *outfilename) {
FILE *infile = fopen(infilename, "rb");
gzFile outfile = gzopen(outfilename, "wb");
if (!infile || !outfile) return -1;
char inbuffer[128];
int num_read = 0;
unsigned long total_read = 0, total_wrote = 0;
while ((num_read = fread(inbuffer, 1, sizeof(inbuffer), infile)) > 0) {
total_read += num_read;
gzwrite(outfile, inbuffer, num_read);
}
fclose(infile);
gzclose(outfile);
}
在发送套接字之前压缩文件有什么好处?
答案 0 :(得分:0)
在发送套接字之前压缩文件有什么好处?
显然,节省网络带宽。但是,这将是一种权衡。因此,以下内容仅涉及 dis 优势
很难在网络压缩中选择一个最佳点,特别是当要压缩的内容未知时。
您需要在“压缩速度”与“压缩率”与“减压速度”之间取得平衡:
如果第一个低,则在压缩有效负载时有未使用的网络容量
如果压缩比率较低,那么如果有大量客户端进行通信和/或您的可用带宽较窄,则可能以网络“饱和”结束
如果解压缩的速度很慢,您可能会使服务器CPU大部分进行解压缩而不是处理有效负载。
在任何情况下,在网络中使用压缩都不是免费的:它是网络带宽和两端CPU周期之间的权衡。如果在压缩之上添加SSL / TSL,则可能会以高昂的CPU成本完成,特别是在服务器/主端(扩展群集,安排额外冷却,进行负载平衡,租用) guru sysadms等。为那些输入的比特拿一个更大的管不是更便宜吗?
对于最常见的情况,当压缩合理时,余额会随着客户端上较重的一侧而移动 - 假设客户端具有过多的处理能力,因此选择更好的压缩算法将节省带宽和服务器CPU。
然而,当发送者处于“实时压力”时(考虑直播音乐会,或者从日内瓦LHC中碰撞希格斯玻色子和其他东西收集数据)情况会发生变化:如果使用压缩(大多数情况下)除了标准/编解码器中内置的压缩算法之外,它的时间不会比压缩率低且计算成本低。