161112 笔记---cocos2dx之libcurl基础知识 + 热更新基础

来源:互联网 发布:python中日期加减 编辑:程序博客网 时间:2024/05/21 15:07

libcurl基础知识


1.global函数
函数原型: CURLcode curl_global_init(long flags);
void curl_global_cleanup(void);
这两个函数是非线程安全的,所以在使用中不要在其他线程中使用,在使用libcurl库所用的函数之前,必须先调用curl_global_init函数,并且只能调用一次,
参数flags:
CURL_GLOBAL_ALL 常用,建议使用
CURL_GLOBAL_WIN32
CURL_GLOBAL_SSL

返回一个枚举类型的数据,返回CURLE_OK代表成功,

2.init和cleanup函数

CURL* curl_easy_init() & void curl_easy_cleanup(CURL* handle)

init函数有一个隐形的功能,在程序调用该函数之前没有显式调用curl_global_init函数,那么他就会自动调用,但是存在一个问题,前边说过curl_global_init
是非县城安全的,所以在多线程中存在致命的问题,在程序执行完后,没有自动调用cleanup函数,造成资源没有释放。

3.setopt

CURLcode curl_easy_setopt(CURL* handle,CURLoption option,parameter)
此函数功能强大,设置一下通信过程中的必要参数和 通信方式,第一个参数………………,第二个参数是操作的类型,地方额参数的类型则要根据第二个参数确定。
libcurl中的option 就像是组成一个状态机,只要你设置一个option改状态将一直保持,直到再次改变,使用curl_easy_reset函数让所有状态回复到默认

CURLOPT_WRITEFUNCTION 当网络数据到达时,执行option中设置的函数
CURLOPT_WRITEDATA 存储网络数据的地方
CURLOPT_READFUNCTION 当数据上传到网络事,回调相应的读取数据函数
CRULOPT_READDATA
CURLOPT_HEADERFUNCTION 接受到头数据时的回调函数
CURLOPT_HEADERDATA
CURLOPT_PROGRESSFUNCTION 进度回调函数
CURLOPT_PROGRESSDATA

回调函数的类型
size_t func_callback(char* ptr,size_t size,size_t nmemb,void * userdata)
对于write和header ptr指向参数到达时存储地方的指针,对于read则是要上传数据的指针
接收到数据的大小时size*nmemb
进度回调函数
int progress_callback(void *clienttp,double dltotal,double dlnow,double ultotal,double ulnow)
clienttp 由CURLOPT_PROGRESSDATA指定,dltotal和dlnow是指定总的数据下载大小和现在已经下载的大小
ultotal和ulnow是上传的参数,下载时设置为0

4 表单函数
CURLFORMcode curl_formadd(struct curl_HTTPposet firstitem,struct curl_HTTPpost lastitem)
void curl_formfree(struct curl_HTTPposet *form)
这两个函数是配合以表单的形式向服务器提交数据是使用,HTTP向服务器发送POST请求提交数据时,都是通过表单来提交的

请求报文:请求行+请求头部+空行+请求数据响应报文:状态行+消息报文+响应报文

5 perform函数
CURLcode curl_easy_perform (CURL* easy_handle)
这个函数 是网络的真正执行函数,它以阻塞的方式进行数据传输,我们可以通过返回值来判断网络操作的结果;


pthread基础知识


pthread是POSIX下的线程标准;
线程管理 + 互斥 + 条件变量 + 同步

1.线程管理
线程退出的方式:
(1)正常运行结束
(2)调用pthread_exit
(3)其他线程调用了pthread_cancel
(4)整个进程终止
(5)主线程执行完成


自动更新 11.14(一个值得纪念的日子)


1.几点注意:
(1)Android编程语言java,我们在java语言这边实现so文件的更新,一般一个游戏项目编译到Android对应的so文件大概几兆,
因此在更新的时候先对so文件进行压缩,然后在对压缩文件进行下载;
(2)so文件在apk包lib的armeabi目录下,这个地方的so文件可以在打包完成后删除掉,将so文件压缩后放到assets目录下,在游戏第一次
运行的时候,把他复制到另外一个目录下,以便对其修改;
(3)在assets目录下放置对应的版本控制文件,也在第一次运行的时候复制到和so文件的同一个目录下;
2.更新的流程:
(1) 将so文件压缩的zip文件和版本控制文件放置到assets目录下,进行打包操作;
(2) 游戏第一次启动的时候,把这几个文件全部复制到files目录下,复制完成,解压zip文件;
(3) 先检查是否有大版本更新,是,进行大版本更新,否,校验so文件的MD5值是否有变化,有,进行更新操作,更新完成,启动游戏;

0 0
原创粉丝点击