tcp协议中的长连接和短连接服务器,谈谈HTTP协议中的短轮询、长轮询、长连接和短链接...
undefined
在之前總結(jié) WebSocket 的時(shí)候就已經(jīng)提到過(guò)短長(zhǎng)輪詢了~~今天看公眾號(hào)文章,又把長(zhǎng)短連接引進(jìn)來(lái)一起分析。感覺這種總結(jié)很棒,那么我們一起看看唄
長(zhǎng)短連接
聽說(shuō)長(zhǎng)短連接的話,應(yīng)該都是這一句吧:HTTP1.0 協(xié)議不支持連接,從 HTTP1.1 協(xié)議以后,連接默認(rèn)是長(zhǎng)連接。
HTTP 協(xié)議是基于請(qǐng)求/響應(yīng)模式的,因此只要服務(wù)端給了響應(yīng),本次 HTTP 連接就結(jié)束了,或者更準(zhǔn)確的說(shuō),是本次 HTTP 請(qǐng)求就結(jié)束了,根本沒有長(zhǎng)連接這一說(shuō)。那么自然也就沒有短連接這一說(shuō)了。
之所以網(wǎng)絡(luò)上說(shuō) HTTP 分為長(zhǎng)連接和短連接,其實(shí)本質(zhì)上是說(shuō)的 TCP 連接。TCP 連接是一個(gè)雙向的通道,它是可以保持一段時(shí)間不關(guān)閉的,因此 TCP 連接才有真正的長(zhǎng)連接和短連接這一說(shuō)。
其實(shí)知道了以后,會(huì)覺得這很好理解。HTTP 協(xié)議說(shuō)到底是應(yīng)用層的協(xié)議,而 TCP 才是真正的傳輸層協(xié)議,只有負(fù)責(zé)傳輸?shù)倪@一層才需要建立連接。
于是,我們就知道了,長(zhǎng)連接指的是 TCP 連接,不是 HTTP 連接。理解了這一點(diǎn)之后,我們?cè)賮?lái)看,把所有的請(qǐng)求都默認(rèn)為長(zhǎng)連接有什么作用。
因?yàn)殚L(zhǎng)連接意味著連接被復(fù)用,那么這里復(fù)用的是 TCP 通道。于是,一個(gè)網(wǎng)站上的多個(gè) HTTP 請(qǐng)求可以復(fù)用同一個(gè) TCP 連接,這也就是節(jié)省了很多 TCP 連接建立和斷開的消耗。于是,我們就懂了,為啥 HTTP1.1 要默認(rèn)長(zhǎng)連接,因?yàn)槎踢B接幾乎沒有好處啊~
那么第二個(gè)問(wèn)題:怎么設(shè)置長(zhǎng)連接呢?
很簡(jiǎn)單,只要設(shè)置 Connection 為 keep-alive。當(dāng)然是的,但要服務(wù)器和客戶端(HTTP1.1 默認(rèn))都設(shè)置。
另外,最后關(guān)于長(zhǎng)連接還要多提一句,那就是,長(zhǎng)連接并不是永久連接的。如果一段時(shí)間內(nèi)(具體的時(shí)間長(zhǎng)短,是可以在 header 當(dāng)中進(jìn)行設(shè)置的,也就是所謂的超時(shí)時(shí)間),這個(gè)連接沒有 HTTP 請(qǐng)求發(fā)出的話,那么這個(gè)長(zhǎng)連接就會(huì)被斷掉。
這一點(diǎn)其實(shí)很容易理解,否則的話,TCP 連接將會(huì)越來(lái)越多,直到把服務(wù)器的 TCP 連接數(shù)量撐爆到上限為止。現(xiàn)在想想,對(duì)于服務(wù)器來(lái)說(shuō),服務(wù)器里的這些個(gè)長(zhǎng)連接其實(shí)很有數(shù)據(jù)庫(kù)連接池的味道,大家都是為了節(jié)省連接重復(fù)利用嘛,對(duì)不對(duì)?
長(zhǎng)輪詢短輪詢
這里在我學(xué)習(xí) websocket 的時(shí)候已經(jīng)詳細(xì)說(shuō)過(guò)了~~這里稍微再補(bǔ)充一下自己的理解吧。
輪詢:輪-> 循環(huán); 詢: 查詢;
也就是長(zhǎng)短輪詢,就是周期短或者周期長(zhǎng)的循環(huán)查詢服務(wù)器信息。那么周期怎么算呢?客戶端發(fā)起的信息那一刻到服務(wù)器應(yīng)答,就算一個(gè)周期。
于是長(zhǎng)短輪詢就能很快區(qū)別開來(lái)了,長(zhǎng)輪詢,不停地問(wèn)服務(wù)器拿信息,但是服務(wù)器很久才回答你(信息有更新再回答)。短輪詢,不停地問(wèn)服務(wù)器拿信息,服務(wù)器會(huì)馬上告訴你情況。
長(zhǎng)短輪詢和長(zhǎng)短連接的區(qū)別決定的方式;一個(gè) TCP 連接是否為長(zhǎng)連接,通過(guò)設(shè)置 HTTPde Connection Header 來(lái)決定的,而且是要客戶端和服務(wù)器都設(shè)置;輪詢的決定權(quán)是在于服務(wù)器的處理方式,客戶端沒辦法解決
實(shí)現(xiàn)方式,連接的長(zhǎng)短由協(xié)議來(lái)規(guī)定和實(shí)現(xiàn)。而輪詢是依賴編程方式手動(dòng)掛起請(qǐng)求實(shí)現(xiàn)的。
這里是來(lái)自別人的思路分享文章,因?yàn)闆]有別人的思路歷程直接 copy 也是不太好。哪里看不明白,建議直接跳轉(zhuǎn)。
總結(jié)
以上是生活随笔為你收集整理的tcp协议中的长连接和短连接服务器,谈谈HTTP协议中的短轮询、长轮询、长连接和短链接...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 曹衣带水吴带当风情话的意思 曹衣带水吴带
- 下一篇: 上一支香是什么意思 关于上一支香的意思介