cocos2d-x 通讯数据压缩与解压
来源:互联网 发布:mil是哪里的域名 编辑:程序博客网 时间:2024/05/16 07:35
说一下手机游戏通讯协议中的数据问题,大量的数据将给服务器端和客户端带来很大的压力,一般来说。
转载请注明出处:http://www.cnblogs.com/zisou/p/cocos2dxJQ-8.html
游戏的数据分静态数据和服务器传过来的动态数据,静态数据大部分通过lua,xml,csv等格式来存储使用。
动态数据则由服务器发给我们了,不管是用弱联网还是强联网,往往服务器会发送大量的一些数据给客户端接收,
如果思路设计的不好,往往发送接受而不止一次,那么遇到这样的服务器客户端交互的大数据问题只能靠压缩和解压来处理了,
压缩后不但可以将大数据变小,还可以为用户节省流量,一举多得的事情是非常赞的。
最近我的一个项目就使用了这个压缩和解压工具,源码是C写的,所以可以放心的跨平台使用。
下面我说一下具体使用的细节:
1,在使用之前需要先初始化一下,且初始化一次就好,放在构造函数中
//消息压缩加密 if (lzo_init() != LZO_E_OK) { printf("internal error - lzo_init() failed !!!\n"); printf("(this usually indicates a compiler bug - try recompiling\nwithout optimizations, and enable '-DLZO_DEBUG' for diagnostics)\n"); }
2,在给服务器发送的时候也可以压缩,压缩方法如下:
lzo_uint in_len; lzo_uint out_len; lzo_bytep in_last = (lzo_bytep)json_data; in_len = strlen(json_data); if (lzo1x_1_compress(in_last,in_len,outlast,&out_len,wrkmem) == LZO_E_OK) { printf("compressed %lu bytes into %lu bytes\n", (unsigned long) in_len, (unsigned long) out_len); } else { CCLOG("错误了!"); return 0; }
3,接收到服务器数据的时候进行解压,当然在这时,接受的到包是压缩后的包,而且直接接收到的压缩包直接输出是看不到值的,但包的大小
是可以通过服务器获取,所以解包的时候和上面是相反的;
lzo_uint old_len; lzo_uint new_len; char *strbuff_cc = new char[REC_BUFSIZE]; memset(strbuff_cc, 0, REC_BUFSIZE); old_len = allsize; if (lzo1x_decompress((lzo_bytep)buffer_all,allsize,(lzo_bytep)strbuff_cc,&new_len,NULL) == LZO_E_OK) { printf("decompressed %lu bytes back into %lu bytes\n", (unsigned long) new_len, (unsigned long) old_len); } else { CCLOG("解压err!"); } strbuff = string(strbuff_cc); if(strbuff.length()>0) { SocketThread::paserBody(strbuff); int num = strlen(strbuff.c_str()); CCLOG("all package >>>>>%s,and size:%d",strbuff.c_str(),num); CCLOG("package size:%d",num); }
Ok,我们来看一些效果,将使你会大吃一惊的!
已将包大小为16567 的解压出来为123768,12K的东西压缩为1K,通讯质量以及速度将会快很多,以及流量都会节省不少。
0 0
- cocos2d-x 通讯数据压缩与解压
- Cocos2d-x 通讯的数据压缩与解压
- cocos2d-x 与lua 通讯
- iOS 数据压缩与解压
- 【Cocos2d入门教程十四】Cocos2d-x与Java的通讯
- cocos2d-x中图片数据压缩的算法
- 如何应用java.util.zip包现数据压缩与解压
- 应用java.util.zip包现数据压缩与解压
- GZIP数据压缩/解压工具
- ZIP数据压缩/解压工具
- 【玩转cocos2d-x之三十一】弱联网与服务器的通讯
- 【玩转cocos2d-x之三十一】弱联网与服务器的通讯
- cocos2d与cocos2d x卸载
- Quick-cocos2d-x 与Cocos2d-x 区别
- cocos2d-x 与 lua
- cocos2d-x与CocosBuilder
- Ubuntu 与 cocos2d-x
- unity ZIP压缩解压 Byte[]数据压缩解压
- VM10安装CentOS 6
- 遇到一个Linux文件系统因bios时间错误变成只读的问题
- 无废话WCF入门教程二[WCF应用的通信过程]
- JFreeChart设置曲线颜色方法
- 【009】副本构造器
- cocos2d-x 通讯数据压缩与解压
- VC 使用ADO连接 DB2数据库
- VTK在VS2010中的配置
- js控制按钮,防止频繁点击响应
- it web
- Coderforces 508B 简单贪心
- Python 使用单链表实现堆栈 (基于class, 包含迭代器)
- 用AutoCompleteTextView实现历史记录提示
- Oracle11g基础知识2【SQL学习笔记】