(上部分)NSURLSession的最大并发 HTTPMaxim

2018-12-17  本文已影响0人  空空小僧

NSURLSession简单介绍:

NSURLSession在iOS7.0时被Apple提出后,它包括几个部分URLSessionConfiguration、URLSessionDelegate、URLSessionTask(组)、URLRequest、URLCache、

URLSessionConfiguration指定NSURLSession的配置信息。这些配置信息决定了NSURLSession的种类,HTTP的额外headers,请求的timeout时间,Cookie的接受策略等配置信息

NSURLSession对比NSURLConnect优势(简单介绍,不细致)

1.NSURLConnect每次进行HTTP请求的时候 ,都需要三次握手,四次挥手等操作,无法复用通道,
NSURLSession在HTTP1.1之后(Keep-Alive),可以复用链接通道,可以三次握手建立链接之后继续复用此通道

  1. NSURLSession针对下载/上传等复杂的网络操作提供了专门的解决方案,针对普通、上传和下载分别对应三种不同的网络请求任务:NSURLSessionDataTask, NSURLSessionUploadTask和NSURLSessionDownloadTask.
    3.下载任务不需要内存拼接data,NSURLSession创建本地临时文件,写到临时文件,优化内存
    4.其他不详细介绍,不是本文重点

URLSessionConfiguration介绍

学习NSURLSession的过程中,NSURLSession的配置分为三种类型,分别为
工作模式分为下面三种:

//普通模式(default):可以使用缓存 (摘抄介绍https://www.cnblogs.com/zanglitao/p/4082334.html)
+ (NSURLSessionConfiguration *)defaultSessionConfiguration; 

//瞬时模式(ephemeral):不使用缓存
+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration; 

//后台模式(background):当按下home键后仍然可以在后台进行上传下载操作,需要通过唯一的identity标示

+ (NSURLSessionConfiguration *)backgroundSessionConfiguration:(NSString *)identifier; 

本文尤其介绍一下URLSessionConfiguration属性中的HTTPMaximumConnectionsPerHost,下图为官方文档对此属性的介绍:

image.png

默认配置下,iOS对于同一个IP服务器的并发最大为4,OS X为6。而如果你没有使用共享的Session,则可能会超过这个数。

代码举例:

image.png

然后经过测试和实践证明:

其他想法:

  1. 基于AFNetworking创建了2个manager,分别对应不同的config,通过打印manger的session实例,发现的确不是一个session,但是并发数量却没有按照我们想象的,各自持有一个并发数,而是如下:
  2. A B 为ephemeralSessionConfiguration 和defaultSessionConfiguration 混合,使用默认值的时候,
    按照顺序创建task,直到满足4个默认值,就停止了,
    测试使用demo: https://github.com/yangfangkuo/downLoadTest

下部分: https://www.jianshu.com/p/a8f1f7353e7f

上一篇 下一篇

猜你喜欢

热点阅读