套接字中压缩数据的优点

时间:2016-09-27 02:16:23

标签: c++ sockets zlib

我使用 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);
}

在发送套接字之前压缩文件有什么好处?

1 个答案:

答案 0 :(得分:0)

  

在发送套接字之前压缩文件有什么好处?

显然,节省网络带宽。但是,这将是一种权衡。因此,以下内容仅涉及 dis 优势

很难在网络压缩中选择一个最佳点,特别是当要压缩的内容未知时。

您需要在“压缩速度”与“压缩率”与“减压速度”之间取得平衡:

  1. 如果第一个低,则在压缩有效负载时有未使用的网络容量

  2. 如果压缩比率较低,那么如果有大量客户端进行通信和/或您的可用带宽较窄,则可能以网络“饱和”结束

  3. 如果解压缩的速度很慢,您可能会使服务器CPU大部分进行解压缩而不是处理有效负载。

  4. 在任何情况下,在网络中使用压缩都不是免费的:它是网络带宽和两端CPU周期之间的权衡。如果在压缩之上添加SSL / TSL,则可能会以高昂的CPU成本完成,特别是在服务器/主端(扩展群集,安排额外冷却,进行负载平衡,租用) guru sysadms等。为那些输入的比特拿一个更大的管不是更便宜吗?

    对于最常见的情况,当压缩合理时,余额会随着客户端上较重的一侧而移动 - 假设客户端具有过多的处理能力,因此选择更好的压缩算法将节省带宽和服务器CPU。

    然而,当发送者处于“实时压力”时(考虑直播音乐会,或者从日内瓦LHC中碰撞希格斯玻色子和其他东西收集数据)情况会发生变化:如果使用压缩(大多数情况下)除了标准/编解码器中内置的压缩​​算法之外,它的时间不会比压缩率低且计算成本低。