上篇博客说到AFNetworking3.0只提供了NSURLSession的支持。其实,NSURLSession在iOS7.0被Apple提出后,苹果就对其良好的API设计大力推崇,认为NSURLSession是Foundation中网络的未来,并且是一个美好的未来。然而它的使用效果似乎一直都和NSURLConnection不相伯仲,业界也认为NSURLConnection 不会被弃用,今后一段时间应该也不会。
然而最终NSURLConnection还是被弃用了,为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。那么NSURLSession凭借怎样的优势能将非常好用的NSURLConnection取而代之呢?
一、NSURLSession提升了网络连接速度
2015年,RFC文档(RFC文档是一系列关于Internet的技术资料汇编,早期为ARPANET)编号7540正式发表了下一代HTTP协议HTTP/2,是1999年发布HTTP/1.1以来的首个更新。相对于前一个版本,HTTP/2以快著称。加载同样一张图片,新的协议所用时间是旧协议的四分之一。
根据2015的WWDC Session711,我们知道iOS9+,NSURLSession开始正式支持HTTP/2,也就意味着你的网络连接速度可以提升不少。更人性化更优秀的API设计,HTTP/2的支持,成为了开发者摒弃NSURLConnection的理由。
二、Session采用了共享,而非每次都新建
共享Session到底给网络连接带来了哪些好处呢?我们先来聊聊网络通讯协议。我们都知道,HTTP协议是基于TCP协议的。所以在每次的HTTP请求之前,客户端和服务器都先需要经过TCP连接的三次握手,即请求之前,网络的数据都已经在客户端和服务器端之间来回了三次
事实上在HTTP/0.9 ,HTTP/1.0协议的时代,每次HTTP的请求,都需要先经过TCP的连接,而后才能开始HTTP的请求。那么,为了让我们的请求更快,避免每次都产生一个TCP三次握手,成了一个优化的选项。于是在HTTP/1.1*享的Session将会复用TCP的连接,这样就避免了每次操作都开启一个TCP三次握手的时间浪费,即加速了网络请求时间。
通过查看文档,我们可以知道iOS对同一个IP的服务器的最大并发数为4,OSX为6,但是如果没有共享Session,则可能会超过这个数。