短輪詢:客戶端發起請求,服務器不管有無消息都返回信息,結束http鏈接。而後繼續發起請求。
長輪詢:客戶端發起請求,創建鏈接,直到服務端返回消息response,結束http鏈接。而後繼續發起請求,重複剛纔的動做。
這種作法缺點在於:
短輪詢要求服務器有很快的處理速度和資源。長輪詢則要求服務器有很高的併發,同時接收多個鏈接,服務多個鏈接。
websocket區別於短、長輪詢:它只創建一次http鏈接,創建鏈接後,服務端可主動向客戶端發送消息,而不是客戶端發送請求後,服務端才返回消息。
http 的長鏈接:經過Connection:keep-alive來創建鏈接,一次tcp鏈接完成屢次http請求,請求仍須要header,kepp-alive的保持時長在服務端設置。
websocket區別於長鏈接:一次tcp鏈接後,雙方都可發送數據,不須要header,可隨時結束鏈接。
websocket的工做原理:
客戶端發送一次特殊的http請求,在通過 tcp/ip 傳輸層協議(三次握手)後,應用層http協議升級爲websocket協議,進行實際的數據傳輸。
這個特殊的http請求的頭部內容包括Connection:Upgrade Upgrade:websocket,切換到websocket協議(響應狀態碼 101 表示服務器已經理解了客戶端的請求,在發送完這個響應後,服務器將會切換到在Upgrade請求頭中定義的那些協議)。websocket使用此機制以兼容的方式與http服務器創建鏈接。
WebSocket 是一種在單個TCP鏈接上進行全雙工通訊的協議(基於 TCP 的協議)。
Websocket 經過HTTP/1.1 協議的101狀態碼進行握手(與 HTTP 的惟一關係就是它的握手請求能夠做爲一個升級請求(Upgrade request)經由 HTTP 服務器解釋)。
websocket的通信協議中:客戶端發出的數據幀須要進行掩碼處理。服務器發送的數據幀則未通過掩碼處理。因此若是服務器收到客戶端發送的未經掩碼處理的數據包,則會自動斷開鏈接;反之,若是客戶端收到了服務端發送的通過掩碼處理的數據包,也會自動斷開鏈接。