nsurlsession 和 nsurlconnection 能实现吗? 手动实现的关键点在哪里?

我这里说的串行网络请求,指的是第一个网络请求不返回数据,第二个网络请求就不能开始。

AFNetworking 使用NSUrlConnection 系列函数实现串行网络请求的方法如下,本质是在AFURLConnectionOperation实现了响应方法,让网络请求内容返回后,再结束Operation,这样就实现了我们想要的串行请求。不用AFHTTPRequestOperationManager也是可以的,但是要自己建立一个queue.

  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

  manager.operationQueue.maxConcurrentOperationCount = ;

AFNetworking中用NSUrlSession实现的方法就没有上面那么好用的串行下载方法了,虽然在代码中有以下code

[NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue];

这里也有一个quque,但是这个queue是NSURLSession的delegate的回调方法的queue,这个queue的

maxConcurrentOperationCount已经被赋值为1,目的是串行地处理各个task的delegate的回调,而不是串行地下载,几个task可能在同时下载,至于到底是几个在同时下载,应该是由系统看情况自动处理的。比如有以下代码:

 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];

    for(int i = ;i<;i++){
NSURLSessionDownloadTask *task2 = [session downloadTaskWithURL:[NSURL URLWithString:@"http://www.baidu.com"] completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSLog(@"current thread is %@",[NSThread currentThread]);
NSLog(@"==================================%d",i); for(int i=;i<;i++){
NSLog(@"%d",i);
};
}]; [task2 resume];
}

那么 20个请求会同时发出,响应也被同时得到了,但是处理数据的回调的block是串行执行的(这是因为不指定queue的话,系统会自动建立一个serial queue)!

顺便看一下网络请求的截图印证一下:

如果我们的请求都来自一个host,也可以用

 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.HTTPMaximumConnectionsPerHost = 1;

方法来实现我们想要的串行下载,但是注意,如果等待时间过长,(具体时间是多少???),这种方法可能产生网络超时的错误!所以这个设定HTTPMaximumConnectionsPerHost的方法不适用多个大型文件的下载。

iOS 串行网络请求。。。待研究的更多相关文章

  1. 使用 RxJava 进行嵌套串行网络请求的一种方法

    需求 有这样一个列表数据,它包含了商店+订单的信息,获取订单列表时,订单实体中会包含商店的 ID,而列表显示时需要商店的名称和 logo,这时候就需要进行嵌套串行网络请求了. 关键词 flatMap ...

  2. iOS美丽约网络请求分析

    网络请求分析html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padd ...

  3. 基于FPGA实现的高速串行交换模块实现方法研究

    基于FPGA实现的高速串行交换模块实现方法研究 https://wenku.baidu.com/view/9a3d501a227916888486d7ed.html

  4. iOS基础之网络请求相关

    1.AFNetwork二次封装方法一: #import <Foundation/Foundation.h> @interface BeeNetworkManager : NSObject ...

  5. ios编程之网络请求

    网络请求有GET请求和POST请求,get和post实现的时候可以选择同步或者异步实现.看一个请求是GET还是POST就看网址后面有没有携带请求体. GET与POST 区别  1.get请求 请求的网 ...

  6. iOS中的网络请求 和 网络监测

    1.网络监测 //根据主机名判断网络是否连接 Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu ...

  7. iOS开发之网络请求(基于AFNetworking的再封装)

    最近一直很忙也没有什么时间写博客了.放假了休息一下,就写一篇博客来总结一下最近做项目中出现过的问题吧!!! 首先,在项目中我的起到了什么作用,无非就是把美工(UI设计师)给我们的图显示出来,然后再和服 ...

  8. ios中封装网络请求类

    #import "JSNetWork.h" //asiHttpRequest #import "ASIFormDataRequest.h" //xml 的解析 ...

  9. iOS -读书笔记-网络请求

    知道"3次握手"吗?突然想起这个词 什么是3次握手? TCP三次握手/四次挥手详解 这里是3次握手的详解 3次握手就是为了可靠的传送数据,TCP(什么是TCP呢?TCP就是一种可靠 ...

随机推荐

  1. rabbitmq的web管理界面无法使用guest用户登录

    安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败. 翻看官方的release文档后,得知由于账号gues ...

  2. [CentOs7]图形界面

    摘要 为了更方面的看到命令的执行后的效果,感觉安装一个图形界面,学习起来更有感觉.至少知道自己做了哪些事.在刚开始安装虚机的时候,选择了最小安装centos7,发现在使用命令安装图形界面的时候,尝试了 ...

  3. Javabean+servlet+JSP(html)实例应用

    大家都知道Javabean+servlet+JSP是最简单的MVC模式.的确,在一个小型的项目中,这个模式完全够用. 它优雅并且简洁.加上jQueryui的完美展示效果,让这个模式看起来非常合适.当然 ...

  4. yaf扩展

  5. Linq→join中指定多个条件

    还是习惯先撸一段SQL * FROM User_Pic P AND P.Guid = R.UserPicGuid ORDER BY PicSize DESC 然后发现Linq中的join不能多条件.. ...

  6. (1)apply族函数总论

                  来自为知笔记(Wiz) 附件列表

  7. 【codevs1380】没有上司的舞会

    题目描述 Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快乐指数.现在有个周年庆宴会,要求与会职员的快乐指数 ...

  8. WebSocket帧数据 解码/转码

    数据从浏览器通过websocket发送给服务器的数据,是原始的帧数据,默认是被掩码处理过的,所以需要对其利用掩码进行解码. 从服务器发送给浏览器的数据是默认没有掩码处理的,只要符合一定结构就可以了.具 ...

  9. jquery左右滑动效果的实现

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. HDU 4791 Alice's Print Service(2013长沙区域赛现场赛A题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4791 解题报告:打印店提供打印纸张服务,需要收取费用,输入格式是s1 p1 s2 p2 s3 p3.. ...