1. 程式人生 > >WebSocket學習(一)——webSocket簡介

WebSocket學習(一)——webSocket簡介

之前用過java的socket實現過一個聊天室,但其實WebSocket和socket並不是一個東西。

我們知道tcp連線是建立在三次握手的機制上,web的核心是http協議,http協議是建立在TCP協議之上的一種應用

tcp連線和http連線

tcp連線:TCP連線一旦建立,在通訊雙方中的任何一方主動關閉連線之前,TCP 連線都將被一直保持下去。斷開連線時伺服器和客戶端均可以主動發起斷開TCP連線的請求,斷開過程需要經過“四次握手”

http連線:HTTP在每次請求結束後都會主動釋放連線,因此HTTP連線是一種“短連線”,要保持客戶端程式的線上狀態,需要不斷地向伺服器發起連線請求。通常的做法是即時不需要獲得任何資料,客戶端也保持每隔一段固定的時間向伺服器傳送一次“保持連線”的請求,伺服器在收到該請求後對客戶端進行回覆,表明知道客戶端“線上”。若伺服器長時間無法收到客戶端的請求,則認為客戶端“下線”,若客戶端長時間無法收到伺服器的回覆,則認為網路已經斷開。

簡單的說就是tcp連線是一個長連線(輪詢的方式:一直髮訊息證明自己存在,伺服器可以主動發訊息到客戶端)

http是一個短連線(“請求—響應”的方式:傳送請求才建立連線,伺服器只能請求之後發訊息到客戶端)

socket原理

建立Socket連線至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。

套接字之間的連線過程分為三個步驟:伺服器監聽,客戶端請求,連線確認。(TCP的三次握手

1、伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態,等待客戶端的連線請求。

2、客戶端請求:指客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連線請求。

3、連線確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求時,就響應客戶端套接字的請求,建立一個新的執行緒,把伺服器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連線。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。

可以看出socket和TCP的關係

當使用TCP協議進行連線時,該Socket連線就是一個TCP連線(Socket可以支援不同的傳輸層協議(TCP或UDP))

WebSocket原理

WebSocket相對於Http是一個持久化的協議——不會斷開連線——利用一次簡單的握手建立起tcp協議

實現了瀏覽器與伺服器全雙工(full-duplex)通訊——允許伺服器主動傳送資訊給客戶端(不同於HTTP協議)

原理:在實現websocket連線過程中,需要通過瀏覽器發出websocket連線請求,然後伺服器發出迴應,這個過程通常稱為“握手” 。在 WebSocket API,瀏覽器和伺服器只需要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。在此WebSocket 協議中,為我們實現即時服務帶來了兩大好處: 1. Header 互相溝通的Header是很小的-大概只有 2 Bytes 2. Server Push 伺服器的推送,伺服器不再被動的接收到瀏覽器的請求之後才返回資料,而是在有新資料時就主動推送給瀏覽器。 簡單的說一下,關於WebSocket的API在後面說明