长字符串压缩算法,各位大大有没有好的解决方案?
发布于 9 年前 作者 im-here 23169 次浏览 最后一次编辑是 8 年前 来自 问答

最近在做手游,短连接,有的api发送给客户端的数据(字符串)比较大,达到了40kb左右,想压缩一下。各位大大有没有好的解决方案呢?

31 回复

你可以试试用压缩软件压缩你那个40KB的数据,然后看压缩后的数据大小你是否能接受

@louislve 40kb的txt用zip压缩后4kb,小了10倍。

难道没有gzip ?

为什么不用 websocket,ws 可以 传输二进制数据,

@359056163 websocket 不就成了长连接了吗?

@fundon 好的,谢谢,我看看!

有很多压缩算法的,其实感觉gzip就可以

@XGHeaven htttp服务器开启gzip吗?

@zhfish http服务器开启gzip吗?

lz的API返回的数据格式肯定是json或者xml或者其他字符串类型的,然后返回的数据属性太多就造成现在的局面,我说当初定义数据格式的时候你咋就没考虑这种低效的数据格式会带来的问题呢?

估计lz压缩了数据之后,到时候服务器cpu吃不消,又要来发帖问怎么优化了,哈哈

@flyingcodes 确实,返回的是json格式的字符串。 其实目前看来问题还不是很大,主要是在获取pvp排名等有大数据的时候,返回给客户端的数据量有点大,看了下有50多kb了。所以想看看有没有什么方式可以压缩下。 另:像这种api应该怎么设计才合理呢? 也是第一次做。

@imhered 既然你说了现在问题不大,那么可以在特殊的地方特殊处理一下,压缩也可以,或者返回字节数据,比如表示true不用字符串"true"而用一个二进制位,学过c的结构你就懂的

@flyingcodes 返回字节数据怎么弄? 还有上面问的,这种api一般该怎么设计才能避免出现这种大数据返回给客户端的情况呢?

@imhered 返回字节数据卧铺不是说了吗?比如表示true不用字符串"true"而用一个二进制位。表示整数123456不是用字符串“123456”,而是用4个字节或8个字节。定义好数据结构你就可以省略掉名称信息,比如你要返回{name:“my name”, money: 123456789, time:“2015-12-13 15:30:46.123”, remark: “abcdef eeeeee”},你自己算算用json返回要多少字节?如果定义好结构呢,只要"my name"+4+4+“abcdef eeeeee”,你看是不是省了好多?一条记录上节约的是不明显,你刚才说的pvp排名估计是多行记录吧?100行?那就省略了100 x N 了。

@flyingcodes 多谢,学习了。

@imhered 推荐一个我身边大一的大神写的一个关于json压缩的包,支持python,go,nodejs等等语言的。 JKSN

@XGHeaven 谢谢,我看看

@imhered 123<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>

@imhered <br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>

@shinygang 什么鬼。

@imhered 搞错了,我上次源码里面忘记删token了,人家用的我的源码在乱发帖回帖。

@imhered 悲剧啊,气死我了,这人太不道德了。

@imhered 最近也有这个需求,之前看到这贴,就收藏了。然后试了帖子里的所有方法,然后花了一天时间google和github,各种尝试,现在选定了方案,可以回答你了。 http://pieroxy.net/blog/pages/lz-string/index.html 就是这个!!server和browser都可以用,很好很强大。

@klausgao 谢谢,容我研究研究!

用 gzip 有什么不好的吗?

@alsotang 没明白gzip怎么用。nginx开启gzip吗?

回到顶部