談一談URLConnection與URLSession的聯(lián)系

[toc]

1 Connect與Session

先看看官方文檔對于URLSession的第一句描述。

NSURLSession is a replacement API for NSURLConnection。

也就是說Apple推出URLSession就是用來替換NSURLConnection。那么為什么要搞出來個URLSession去代替NSURLConnection而不是在NSURLConnection上去迭代?
我們先理解一下session和connect的直觀含義,前者是會話、后者是連接,做過數(shù)據(jù)庫、通信協(xié)議相關(guān)開發(fā)和研究工作的小伙伴都能理解這二者的區(qū)別。

我們先看看數(shù)據(jù)庫訪問中二者的區(qū)別(以下摘自 Oracle 9i &10g 編程藝術(shù)):

連接(connection):連接是從客戶到Oracle 實例的一條物理路徑。連接可以在網(wǎng)絡(luò)上建立,或者通過IPC機(jī)制建立。通常會在客戶進(jìn)程與一個專用服務(wù)器或一個調(diào)度器之間建立連接。
會話(session):會話是實例中存在的一個邏輯實體。這就是你的會話狀態(tài)(session state),也就是表示特定會話的一組內(nèi)存中的數(shù)據(jù)結(jié)構(gòu).提到"數(shù)據(jù)庫連接"時,大多數(shù)人首先想到的就是“會話”。你要在服務(wù)器中的會話上執(zhí)行SQL、提交事務(wù)和運行存儲過程。

一般來說,會話=連接+狀態(tài),一個連接可以提供給多個會話,而一個會話也有可能利用多個連接。
有小伙伴會說,http是無狀態(tài)的,所以只有http連接一說,沒有http會話一說。確實,早期http是無狀態(tài)的,后來為了提高h(yuǎn)ttp工作的效率,加入了cookie/session機(jī)制,cookie/session保存http的狀態(tài),http會話由此誕生。

據(jù)此,Apple將他們設(shè)備里的一個http請求當(dāng)做一個http會話,或者說是一個URLSession是沒有任務(wù)問題的。

2 從URLConnection到URLSession的轉(zhuǎn)變與http2.0是不是有聯(lián)系

從URLConnection到URLSession的轉(zhuǎn)變與http2.0是不是有聯(lián)系呢?我們先看看兩個時間點:
ios7.0發(fā)布時間 2013.09
http2.0草案測試版本發(fā)布時間 2013.08

再看看HTTP2.0相較于http1.0主要做了什么

協(xié)議的目標(biāo):
異步多路復(fù)用
頭部壓縮
請求/響應(yīng)管線化

重點看看這個異步多路復(fù)用,不了解的小伙伴可以去這篇博客了解一下,淺析HTTP/2的多路復(fù)用。

我這里簡單的說一下,http1.1搞出來個長連接,主要是為了解決http1.0發(fā)起一個http請求要重新通過tcp握手協(xié)議建立tcp通道的資源浪費問題。但是http1.1又有個問題:串行的文件傳輸效率低、服務(wù)器連接數(shù)過多壓力過大問題。于是在http2.0就搞出了個多路復(fù)用。

總結(jié)

回到我們的問題:從URLConnection到URLSession的轉(zhuǎn)變與http2.0是不是有聯(lián)系呢?
以前我們對于一個http請求,就說是一個connection顯然是合適了。但是在http2.0,APP應(yīng)用或者瀏覽器和同一個域名所有http交互都用的是同一個http連接,也就是說肯定不會創(chuàng)建連接。
用什么合適呢?Apple大大說用Session合適。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容