- 在项目开发过程中,有需要上传超大字符串数据的场景。但是又不是文件上传。经过思考对上传数据进行一次压缩,降低字符串长度即降低数据在网络传输过程中的大小,达到优化的目的。
- 客户端是由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字节。
[erlang]针对http传输过程中body数据的优化
最新推荐文章于 2024-10-10 16:39:09 发布