【cocos2d-x 手游研发小技巧(8)通讯的数据压缩与解压 】
今天说一下手机游戏通讯协议中的数据问题,大量的数据将给服务器端和客户端带来很大的压力,一般来说。
转载请注明出处: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 ;
}
3,接收到服务器数据的时候进行解压,当然在这时,接受的到包是压缩后的包,而且直接接收到的压缩包直接输出是看不到值的,但包的大小
是可以通过服务器获取,所以解包的时候和上面是相反的;
lzo_uint old_len;
lzo_uint new_len; char *strbuff_cc = new char[REC_BUFSIZE];
memset(strbuff_cc, , 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()>)
{
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,通讯质量以及速度将会快很多,以及流量都会节省不少。
我将这个压缩工具分享一下:
【cocos2d-x 手游研发小技巧(8)通讯的数据压缩与解压 】的更多相关文章
- 【cocos2d-x 手游研发小技巧(6)聊天系统+字体高亮】
转载请注明出处:http://www.cnblogs.com/zisou/p/cocos2dxJQ-6.html 聊天系统在手机网游中是最常见的交互工具,大家在一起边玩游戏边聊天岂不乐哉: 废话不多了 ...
- 【cocos2d-x 手游研发小技巧(1)自定义制作怪物伤害数值】
直插主题了,今天写了一下午,早就想要写这类似东西的,首先我不会选用CCLabelAtlas了,我直接用帧图片做. 首先我们要准备素材,我先把素材帖出来给大家: 这个是一张比较全的素材图,它包含了扣血的 ...
- 【cocos2d-x 手游研发小技巧(7)图片资源加密,Lua文件加密】
游戏开发中常遇到资源保护的问题. 目前游戏开发中常加密的文件类型有:图片,Lua文件,音频等文件,而其实加密也是一把双刃剑. 需要安全那就得耗费一定的资源去实现它.目前网上也有用TexturePack ...
- 【cocos2d-x 手游研发小技巧(5)获取网络图片缓存并展示】
今天是年前最后一天上班了,最后一天上班,祝大家马上有各种东西,最后一天也给写一点干货,就是获取网络图片: 经过自己简单封装了一下,实现了获取网络图片,按照比例展示出来,实现方法是cocos2dx - ...
- 【cocos2d-x 手游研发小技巧(4)与Android混编实现换“头像图片”】
cocos2dx在android平台上的游戏开发中往往会遇到一些混编需求,如: 比方有的社区类游戏需要用到更换玩家的“头像”操作,其实就是调用android servers服务里面的本地图片,以及选取 ...
- 【cocos2d-x 手游研发小技巧(3)Android界面分辨率适配方案】
先感叹一下吧~~android的各种分辨率各种适配虐我千百遍,每次新项目我依旧待它如初恋···· 每家公司都有自己项目工程适配的方案,这种东西就是没有最好,只有最适合!!! 这次新项目专项针对andr ...
- 【cocos2d-x 手游研发小技巧(2)循环无限滚动的登陆背景】
原创文章,转载请附上链接:http://www.cnblogs.com/zisou/p/cocos2d-xARPG6.html 首先让大家知道我们想要实现的最终效果是什么样的? 看一个<逆天仙魔 ...
- 【cocos2d-x 手游研发----目录】
感谢大家一直支持我写这样一系列的博客,从中我自己也获益良多,cocos2d-x这样一款非常棒的引擎,是值得我们去学习和分享的,谈到分享,那我就把这套写了差不多一两个月的框架给大家开源下载,写的很一般, ...
- 【cocos2d-x 手游研发----地图活起来了】
谈到地图不少人都说要做地图编辑器了,但是我暂时绕过这一步,如果不用寻路地图就不能移动?寻路就是会绕过障碍物的算法. 我做了一个简单的地图的思想,就是地图分层3层:背景层.可行区域层.遮罩层,但是地图就 ...
随机推荐
- jsp连接sqlServer数据库教程
一.首先讲下我用的工具版本以供参考: jar包:jtds1.3.1.jar 下载地址:点击进入 数据库:SQL Server2012 服务器:Tomcat8.0 下载地址:点击进入 开发IDE工 ...
- 跟我一起学WCF(7)——WCF数据契约与序列化详解
一.引言 在前面博文介绍到,WCF的契约包括操作契约.数据契约.消息契约和错误契约,前面一篇博文已经结束了操作契约的介绍,接下来自然就是介绍数据契约了.所以本文要分享的内容就是数据契约. 二.数据契约 ...
- MSTest、NUnit、xUnit.net 属性和断言对照表
MSTest.NUnit.xUnit.net 属性对照表 MSTest NUnit xUnit.net Comments [TestMethod] [Test] [Fact] Marks a test ...
- jenkins2 pipeline插件的10个最佳实践
jenkins pipeline的10个最佳实践. 文章来自:http://www.ciandcd.com文中的代码来自可以从github下载: https://github.com/ciandcd ...
- Django MVC simple
- js勾选时显示相应内容
使用环境,一.比如用户勾选时显示一些安全方面提示“你真的要自动登录吗?这将使你下次不需要密码即可进入你的个人中心.”二.显示其他预设选项,以方便用户选择输入,比如密保问题设置,当用户不想使用自定义设置 ...
- Atitit.计算机图形图像图片处理原理与概论attilax总结
Atitit.计算机图形图像图片处理原理与概论attilax总结 计算机图形1 图像处理.分析与机器视觉(第3版)1 数字图像处理(第六版)2 图像处理基础(第2版)2 发展沿革 1963年,伊凡·苏 ...
- linux-菜鸟新手命令(1)
1. ls命令 ls命令是列出目录内容(List Directory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. root@tecmint:~#ls Andro ...
- Leetcode 278 First Bad Version 二分查找(二分下标)
题意:找到第一个出问题的版本 二分查找,注意 mid = l + (r - l + 1) / 2;因为整数会溢出 // Forward declaration of isBadVersion API. ...
- Android JNI HelloWorld实现
创建一个JNIDemo的Android工程 在项目下创建一个文件夹jni.(注意必须是jni目录) 在jni目录下创建两个文件:Android.mk 和 first_jni.c(.c文件的名字可以任意 ...