NSURLSession

###NSURLSession


为什么聊NSURLSession,因为公司内部分享会上,有同事分享了AFNetworking,不可避免的谈到的2.0-3.0的变动,请求类方式从NSURLConnection到NSURLsession,那谈到了为什么有这个变动?有哪些变动?怎么使用NSURLsession? 在谈第一个为什么有这个变动时大家出现了分歧:1.session在使用的时候,可以重用上一次tcp握手链接 2.session和cookies联系,session单利的好处


####HTTP版本
谈以上话题之前,先来看一下HTTP版本相关的几点知识:
这里我把HTTP版本简单分为三类:1.1之前,1.1,2.0,针对这三类做个主要差异的介绍:
> HTTP 1.1之前


- 不支持持久连接。一旦服务器对客户端发出响应就立即断开TCP连接
- 无请求头跟响应头
- 客户端的前后请求是同步的。下一个请求必须等上一个请求从服务端拿到响应后才能发出,有点类似多线程的同步机制。


>  HTTP 1.1(主流版本)


与1.1之前的版本相比,做了以下性能上的提升


- 增加请求头跟响应头
- 支持持久连接。客户端通过请求头中指定**Connection**为**keep-alive**告知服务端不要在完成响应后立即释放连接。HTTP是基于TCP的,在HTTP 1.1中一次TCP连接可以处理多次HTTP请求(keep-alive 有效时间内)
- 客户端不同请求之间是异步的。下一个请求不必等到上一个请求回来后再发出,而可以连续发出请求,有点类似多线程的异步处理。


> HTTP 2.0 (趋势)


- HTTP/2采用二进制格式而非文本格式
- HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
- 使用报头压缩,HTTP/2降低了开销
- HTTP/2让服务器可以将响应主动“推送”到客户端缓存中
- 2.0将只用于https网址。


我们重点关注一下当前1.1版本所做几点改变。支持持久连接有什么好处呢?HTTP是基于TCP连接的,如果连接被频繁地启动然后断开就会花费很多资源在TCP三次握手以及四次挥手上,效率低下。以请求一个网页为例,我们知道,一个html网页上的图片资源并不是直接嵌入在网页上,而只是提供url,图片仍需要额外发HTTP 请求去下载。一个网页从请求到最终加载到本地往往需要经过多个HTTP请求。在1.1版本之前请求一个网页就需要发生多次"握手-挥手"的过程,每次连接之间相互独立;而1.1及之后的版本最少只需要一次就够。
再来就是请求异步,其好处参考多线程异步处理,在此不展开。


http1.0 请求实际步骤如下图:


![图1 session设置了每个host最大的请求线程数为1](/Users/weskhen/Desktop/屏幕快照 2018-06-27 上午8.24.39.png)


![图2 session设置了每个host最大的请求线程数为2](/Users/weskhen/Desktop/屏幕快照 2018-06-30 下午5.13.30.png)
 我们可以看到:
 
 1、多次请求其实只建立了1次TCP连接
 
 2、多次请求连续可以异步发出。
 
 
 so,能重用上一次tcp握手链接的是因为http协议更新到http1.1后.同一个session可以在keep-alive有效时间内不断开链接.
 
####NSURLSessionConfiguration(NSURLSession中重要的属性)
 
 有三个方法来创建NSURLSessionConfiguration:


defaultSessionConfiguration 使用全局的cache,cookie,使用硬盘来缓存数据。
ephemeralSessionConfiguration 临时session配置,与默认配置相比,这个配置不会将缓存、cookie等存在本地,只会存在内存里,所以当程序退出时,所有的数据都会消失,浏览器无痕模式
backgroundSessionConfiguration 后台session配置,需要设置唯一标识,与默认配置类似,不同的是会在后台开启另一个线程来处理网络数据,app杀进程session会断开,重新启动后,session会重新建立.


/* 是否使用蜂窝网络,默认是yes. */
@property BOOL allowsCellularAccess;


/* 
指定了一组默认的可以设置出站请求的数据头。这对于跨会话共享信息,如内容类型,语言,用户代理,身份认证,是很有用的。
例如:
    @{@"Accept": @"application/json",
     @"Accept-Language": @"en",
     @"Authorization": authString,
     @"User-Agent": userAgentString
   }
 */
@property (nullable, copy) NSDictionary *HTTPAdditionalHeaders;


/* 
同时连接一个host的最大数。iOS默认是4.APP是作为一个整体来看的
 */
@property NSInteger HTTPMaximumConnectionsPerHost;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值