[erlang]针对http传输过程中body数据的优化

  • 在项目开发过程中,有需要上传超大字符串数据的场景。但是又不是文件上传。经过思考对上传数据进行一次压缩,降低字符串长度即降低数据在网络传输过程中的大小,达到优化的目的。
  • 客户端是由iOS或者Android开发的app,故需要客户端引入对zip压缩算法的支持,服务端由erlang开发,erlang的zip库模块基本已经够用了。
  • 我是直接在Linux环境下,用zip命令压缩了一个数据文件,可以看出压缩率还是不错的。

    1
    2
    3
    4
    5
    
    MacBook-Pro:testweihualiu$zip-rtest.ziptracker.c
    adding:tracker.c(deflated54%)
    weihualiudeMacBook-Pro:testweihualiu$ls-ltr
    -rw-r--r--1weihualiustaff1675Apr2520:40test.zip
    -rw-r--r--1weihualiustaff3254Apr2520:44tracker.c
    
  • 从上面可以看出,原文件大小是3254字节,压缩后是1675字节。
    然后通过erlang代码将zip文件解压:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    weihualiudeMacBook-Pro:testweihualiu$erl
    Erlang/OTP17[erts-6.4][source][64-bit][smp:4:4][async-threads
        :10][hipe][kernel-poll:false][dtrace]
    EshellV6.4(abortwith^G)
    1>file:read_file("test.zip").
    {ok,<<80,75,3,4,20,0,0,0,8,0,187,69,155,71,17,230,25,143,
    227,5,0,0,182,12,0,0,9,...>>}
    2>{_,Bin}=file:read_file("test.zip").
    {ok,<<80,75,3,4,20,0,0,0,8,0,187,69,155,71,17,230,25,143,
    227,5,0,0,182,12,0,0,9,...>>}
    3>zip:unzip(Bin).
    {ok,["tracker.c"]}
    4>{_,[{_,RBin}]}=zip:unzip(Bin,[memory]).
    {ok,[{"tracker.c",
    <<"/*S0DAYEXPLOITISPRIVATEPLEASEDONOTDISTRIBUTE!\n
        =========================================="...>>}]}
    5>size(RBin).
    3254
    
  • 从最后一行erl终端输出可以看出,已经成功解压zip文件,解压后大小与原有文件一致,都是3254字节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值