三次捂手的無狀態(tài)http協(xié)議疮胖,是web應用的基礎环戈,以此來建立client和server的交互,但是在這種協(xié)議下造成了1 request = 1 response澎灸,no resquest院塞、no response的情況,也就是服務器只能被動的回應服務器端的請求性昭,不能主動發(fā)送消息給客戶端拦止,所以在一些即使應用上,hettp協(xié)議略顯乏力糜颠,但是也可以通過輪詢和長連接兩種方式來完成即時通訊汹族。
ajax輪詢
就是客戶端不斷發(fā)ajax清酒給后端,詢問服務器是否有新消息傳遞給客戶端其兴。
但是很明顯這種方式造成資源浪費巨大
長連接
長連接其實是一種對輪詢的改進顶瞒,引入了阻塞這一概念。
也就是客戶端發(fā)一次請求元旬,服務端在沒得到新消息之前阻塞該請求榴徐,知道有新消息為止守问。
這樣雖然減少不少不必要的請求,但實質和輪詢一樣坑资,而且會產(chǎn)生服務器阻塞所帶來的消耗(高并發(fā))
websocket
websocket是h5新提出的協(xié)議耗帕,在websocket下,客戶端需要向服務器發(fā)送一次請求袱贮,該請求用建立服務端與客戶端之間的連接仿便,讓服務器轉換websocket協(xié)議處理請求,以回調的方式將服務器端的消息發(fā)送至客戶端字柠,從根本上解決http協(xié)議的被動性探越。
長連接和短連接的操作過程
短鏈接的步驟是:
建立連接----數(shù)據(jù)傳輸----關閉連接......建立連接----數(shù)據(jù)傳輸----關閉連接
長連接的步驟是:
簡歷連接----數(shù)據(jù)傳輸.....(保持鏈接)----數(shù)據(jù)傳輸----關閉連接
長連接和短連接的優(yōu)缺點
長連接可以省去多次TCP簡歷和關閉的操作,減少浪費窑业,節(jié)約時間钦幔,但是如果鏈接數(shù)較多會對服務器造成較大的壓力
短鏈接對于服務器來說管理較為簡單,存在連接都是有用的連接常柄。但如果請求屏飯鲤氢,將在TCP的建立和關閉操作上浪費時間和寬帶。
什么時候用長連接西潘,短連接
長連接多用于操作頻繁卷玉,點對點的通訊,而且連接數(shù)不能太多情況下喷市。例如:數(shù)據(jù)庫的連接相种。
而像WEB網(wǎng)站的http服務一般都用短連接,因為長連接對于服務端來說會耗費一定資源品姓,而像WEB網(wǎng)站這么頻繁的成千上萬的訪問量用短連接會更省些資源寝并,如果用長連接會造成服務器很大壓力。
websocket的優(yōu)點
websocket解決了http的幾個難題:
首先被動型:服務器可以主動推送消息給客戶端
服務器上消耗資源的問題:其實我們所用的程序是要經(jīng)過兩層代理的腹备,即HTTP協(xié)議在Nginx等服務器的解析下衬潦,然后再傳送給相應的Handler(php等)來處理。簡單地說植酥,我們有一個非扯频海快速的 接線員(Nginx) ,他負責把問題轉交給相應的 客服(Handler) 友驮。Websocket就解決了這樣一個難題漂羊,建立后,可以直接跟接線員建立持久連接卸留,有信息的時候客服想辦法通知接線員拨与,然后接線員在統(tǒng)一轉交給客戶。
整個過程只建立一次http握手艾猜,所以說整個通訊過程是建立在一次連接/狀態(tài)中买喧,也就避免了HTTP的非狀態(tài)性捻悯,服務端會一直知道你的信息,直到你關閉請求淤毛,這樣就解決了接線員要反復解析HTTP協(xié)議今缚,還要查看identity info的信息。
缺點是:不兼容低版本的IE
原文地址:https://blog.csdn.net/duola8789/article/details/73623059/
原文地址:https://blog.csdn.net/zq736122079/article/details/76850038
原文地址:https://blog.csdn.net/The_c_D/article/details/52494777