一、什麼是http協議
http是乙個應用層協議,無狀態的,埠號為80。主要的版本有1.0/1.1/2.0.
二、什麼是websocket
websocket是html5提出的乙個協議規範,是為解決客戶端與服務端實時通訊。本質上是乙個基於tcp,先通過http/https協議發起一條特殊的http請求進行握手後建立乙個用於交換資料的tcp連線。
websocket優勢: 瀏覽器和伺服器只需要要做乙個握手的動作,在建立連線之後,雙方可以在任意時刻,相互推送資訊。同時,伺服器與客戶端之間交換的頭資訊很小。
三、什麼是長連線、短連線
連線->傳輸資料->關閉連線
http是無狀態的,瀏覽器和伺服器每進行一次http操作,就建立一次連線,但任務結束就中斷連線。
也可以這樣說:短連線是指socket連線後傳送後接收完資料後馬上斷開連線。
連線->傳輸資料->保持連線 -> 傳輸資料-> 。。。 ->關閉連線。
長連線指建立socket連線後不管是否使用都保持連線,但安全性較差。
四、http和websocket的長連線區別
http1.1通過使用connection:keep-alive進行長連線,http 1.1預設進行持久連線。在一次 tcp 連線中可以完成多個 http 請求,但是對每個請求仍然要單獨發 header,keep-alive不會永久保持連線,它有乙個保持時間,可以在不同的伺服器軟體(如apache)中設定這個時間。這種長連線是一種「偽鏈結」
websocket的長連線,是乙個真的全雙工。長連線第一次tcp鏈路建立之後,後續資料可以雙方都進行傳送,不需要傳送請求頭。
keep-alive雙方並沒有建立正真的連線會話,服務端可以在任何一次請求完成後關閉。websocket 它本身就規定了是正真的、雙工的長連線,兩邊都必須要維持住連線的狀態。
1. 短連線http 1.0中:http客戶端與伺服器請求響應模式如下圖所示;短連線
三次握手,每次都需要授權等資訊,一次request,一次response以後關閉連線
2 .長連線
http 1.1規定了預設保持長連線(http persistent connection ,也有翻譯為持久連線),資料傳輸完成了保持tcp連線不斷開(不發rst包、不四次握手),等待在同網域名稱下繼續用這個通道傳輸資料;相反的就是短連線。開啟長連線使用就是header投中的keep-alive屬性
三次握手,當經過第一次授權後,發起一次request,回覆一次response,保持連線keep-alive的時間,這期間內可以發起多次通訊,時間到達後關閉連線,需要注意的是每次發起一次通訊後,keep-alive的時間會重新計時;
說明:keep-alive功能使客戶端到伺服器端的連線持續有效,當出現對伺服器的後繼請求時,keep-alive功能避免了建立或者重新建立連線。
3.心跳、輪詢、長輪詢
3.1 心跳機制:
心跳機制的原理很簡單:客戶端每隔n秒向服務端傳送乙個心跳訊息,服務端收到心跳訊息後,回覆同樣的心跳訊息給客戶端。如果服務端或客戶端在m秒(m>n)內都沒有收到包括心跳訊息在內的任何訊息,即心跳超時,我們就認為目標tcp連線已經斷開了。
3.2 輪詢:
短輪詢:瀏覽器發起乙個「詢問」請求,伺服器無論有無新資料,都立即響應(有就返回新資料,沒有就返回乙個表示』空』的自定義資料格式),乙個http連線結束。
3.3長輪詢:長輪詢的經典實現 —— comet:基於 http 長連線的「伺服器推」技術
瀏覽器發起乙個「詢問」請求,當沒有新資料時,伺服器端並不立即響應,而是等待資料,當有新資料產生時,才向瀏覽器響應,乙個http連線結束。
3.3 補充: 當服務端沒有資料更新的時候,連線會保持一段時間週期知道資料或者狀態改變或者過期,依次減少無效的客戶端和服務端的互動
3.3 補充: 當服務端資料變更頻繁的話,這種機制和定時輪詢毫無區別
4.websocket模式客戶端與伺服器請求響應模式如下圖:
一次握手:通訊一次後記錄授權資訊,伺服器端可以主動多次傳送訊息
TCP長鏈結和短鏈結
tcp在真正的讀寫操作之前,server與client之間必須建立乙個連線,當讀寫操作完成後,雙方不再需要這個連線時它們可以釋放這個連線,連線的建立通過三次握手,釋放則需要四次握手,所以說每個連線的建立都是需要資源消耗和時間消耗的。tcp通訊的整個過程,如下圖 模擬一種tcp短連線的情況 1.cli...
TCP 短鏈結 和 長鏈結
tcp在真正的讀寫操作 資料傳輸 之前,server與client之間必須建立乙個連線,當讀寫操作完成後,雙方不再需要這個連線時它們可以釋放這個連線,連線的建立通過三次握手,釋放則需要四次握手,所以說每個連線的建立都是需要資源消耗和時間消耗的。tcp通訊的整個過程,如下圖 模擬一種tcp短連線的情況...
長鏈結和短鏈結的不同
區別一 定義 長鏈結的定義是 client方與server方先建立連線,連線建立後不斷開,然後再進行報文傳送和接收。這種方式下由於通訊連線一直存在。此種方式常用於p2p點對點的通訊。短鏈結的定義是 client方與server每進行一次報文收發交易時才進行通訊連線,交易完畢後立即斷開連線。此方式常用...