zoukankan      html  css  js  c++  java
  • libcurl断点下载遇到的问题

    最近游戏把资源(图片、配置、lua)的加载、更新全部改了 ,加载其实还好,就是不走之前的zip解压方式。

     

    以前的大体流程:

    下载 –> 启动 –> 解压 –> 更新 –> 进入游戏

    现在的大体流程:

    下载 –> 启动 –> 更新 –> 进入游戏

     

    之前使用散文件gzip方式更新,现在换成下载zip包(断点下载)

     

    在改动完成之后准备提交appstore,结果崩溃的发现在某些设备上debug可以正常更新、release就始终有问题,一直失败。后来在mac上安装了http的抓包工具:HttpScope。发现在head请求之后就不再继续走下去了,然后就猜测是否因为release的原因,导致写入文件时遇到权限问题了,然后就打log,重新生成release包测试…

     

    最后定位到的问题是,head请求始终返回的是0,代码是这样写的:

    m_pUrlHandle = curl_easy_init();

    double dSize = 0.0f;
    curl_easy_setopt(m_pUrlHandle, CURLOPT_URL, m_strRemoteFileUrl.c_str());
    curl_easy_setopt(m_pUrlHandle, CURLOPT_HEADER, 1);
    curl_easy_setopt(m_pUrlHandle, CURLOPT_NOBODY, 1);
    if (curl_easy_perform(m_pUrlHandle) == CURLE_OK) {
    curl_easy_getinfo(m_pUrlHandle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &dSize);
    } else {
    dSize = 0.0f;
    }

    curl_easy_cleanup(m_pUrlHandle);
    m_pUrlHandle = NULL;

    改动就是去掉curl_easy_setopt(m_pUrlHandle, CURLOPT_HEADER, 1);

     

    默认CURLOPT_NOPROGRESS为开启的

    CURLOPT_NOSIGNAL我也设置过,没用。CURLOPT_HEADER如果打开,它会将头信息输出在body中,会不会是因为没有设置CURLOPT_WRITEFUNCTION函数引起的问题呢?

     

    仔细查curl的官方文档http://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION.html,有这样的发现:

     

    也就是如果没有设置CURLOPT_WRITEFUNCTION,那它会调用默认的fwrite方法,那它的路径会是什么呢?不清楚,上面也没写,所以就有可能导致写入失败,从而导致得到的size始终为0

  • 相关阅读:
    mysql主从原理
    mysql锁和事物隔离
    mysql索引查找原理及调优
    MySQL高级查询
    周总结04
    冲刺第六天
    冲刺第五天
    冲刺第四天
    典型用户模板和用户场景模版
    冲刺第三天
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/3986390.html
Copyright © 2011-2022 走看看