iOS读取服务器的文件内容,iOS获取服务器文件大小--同步方式

最近游戏项目有个需求,Unity开发组和iOS SDK组对接时,Unity申明一个函数,传过来一个文件下载的地址的参数,让iOS 对接组立即返回文件大小。

//和Unity交互文件中定义的获取文件大小的对接函数

long long FFGetFileBytes( const char* urlStr){

}

接到这个需求,我认为用同步方式获取网络数据太不合适,但是需求是这样,Unity那边一时半会不好调整,只有先用同步方式获取,技术总监让我尝试下。

之前没有做过这种尝试,都是用AFNetworking异步方式请求。同步方式我印象中得用古老的NSURLConnection发送请求,第一次尝试用下面的方式获取:

+ (long long)fileBytesWithURLStr:(NSString*)urlStr;

{

if ( urlStr.length == 0 )

{

return 0;

}

NSURL* URL = [NSURL URLWithString:urlStr ];

//创建请求对象

NSMutableURLRequest* request = [[ NSMutableURLRequest alloc ] initWithURL:URL ];

//设置请求方式

[request setHTTPMethod:@"GET"];

//接受返回的响应数据、错误信息

NSHTTPURLResponse *resp = nil;

NSError *err = nil;

//同步方式发送网络请求

[NSURLConnection sendSynchronousRequest:request returningResponse:&resp error:&err];

if (err != nil) {

NSLog(@"===%@", err);

return 0;

}

//从响应头获取文件大小

return resp.expectedContentLength;

}

采用这种方式问题就来了,线程卡住了。卡住线程的就是下面这句

[NSURLConnection sendSynchronousRequest:request returningResponse:&resp error:&err];

游戏资源文件都比较大,用3M左右的文件试了下,也会卡几秒钟,直到文件全部获取到才会往下执行。更不用说100多M甚至更大的文件了。

后来技术总监来查看了下我的代码,让我调整下请求方式,改用@“HEAD”:

[request setHTTPMethod:@"HEAD"];

HTTPMethod设置为@“HEAD”,只需要获取头文件。@“HEAD”方式以前从没用过,学习网络知识的时候@“GET”、@“POST”用得比较多,@“HEAD”只是稍微了解一点有这么个方式,并没有深究其用途。今天技术总监提醒了下,才恍然大悟。尝试了下,问题解决了。

@“HEAD”请求方式只是获取服务器返回的response响应头数据,这个数据量相当小,并不需要服务器返回响应体(文件数据),用同步方式相应很快,影响倒也不大,暂时可以解决这个需求的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值