服務端向客戶端推送消息技術之websocket的介紹

服務端向客戶端推送消息技術之websocket的介紹

凱哥java 凱哥java
websocket的介紹java

在講解WebSocket前,咱們先來看看下面這種場景,在HTTP協議下,怎麼實現。web

需求:瀏覽器

在網站中,要實現簡單的聊天,這種狀況怎麼實現呢?以下圖:
服務端向客戶端推送消息技術之websocket的介紹
當發送私信的時候,若是要求實時同步的話,能夠先讓消息入庫,等對方登錄以後,查詢顯示便可。以下圖:
服務端向客戶端推送消息技術之websocket的介紹服務器

但是如今,須要實時消息,怎麼辦?websocket

最簡單的一種方式,就是寫個定時任務,輪詢查詢去。以下圖:markdown

服務端向客戶端推送消息技術之websocket的介紹
雖然這樣能夠實現,咱們能夠看到,每隔必定時間,就會去調用服務器接口,查詢一次。這樣很浪費系統資源的。咱們來看看HTTP協議:socket

服務端向客戶端推送消息技術之websocket的介紹
如上圖:ide

客戶端和服務器創建鏈接後,發送請求數據給服務器;網站

服務器接收請求後,處理完成並更加請求返回響應的呼做爲迴應;3d

客戶端獲得數據後,與服務器斷開鏈接。

這就是HTTP三次握手。是基於TCP/IP的

從上圖中,咱們能夠看到,http協議是典型的拉取方式,短連接的;是客戶端向服務器拉取數據的。若是,客戶端不發送請求,那麼服務器的數據就不會主動給客戶的的。

咱們的需求是要實現即時聊天的。由於要即時,因此,不能考客戶端拉取數據,就須要使用服務器主動給客戶端推送數據的。就須要客戶端和服務器實時保持着聯繫,也就是長鏈接。這種狀況下,咱們應該使用哪一種技術來實現呢?實現方式有不少種,這裏咱們就用websocket來實現。

本文來源:凱哥Java(kaigejava)

咱們來看看WebSocket介紹:

WebSocket 是HTML5一種新的協議。它實現了瀏覽器與服務器全雙工通訊(full-duplex)。一開始的握手須要藉助

HTTP請求完成。WebSocket是真正實現了全雙工通訊的服務器向客戶端推的互聯網技術。它是一種在單個TCP連

接上進行全雙工通信協議。Websocket通訊協議與2011年倍IETF定爲標準RFC 6455,Websocket API被W3C定爲標準。

什麼是全雙工?什麼是單工?

全雙工(Full Duplex)是通信傳輸的一個術語。通訊容許數據在兩個方向上同時傳輸,它在能力上至關

於兩個單工通訊方式的結合。全雙工指能夠同時(瞬時)進行信號的雙向傳輸(A→B且B→A)。指

A→B的同時B→A,是瞬時同步的。

單工、半雙工(Half Duplex),所謂半雙工就是指一個時間段內只有一個動做發生,舉個簡單例子,

一條窄窄的馬路,同時只能有一輛車經過,當目前有兩輛車對開,這種狀況下就只能一輛先過,等到頭

兒後另外一輛再開,這個例子就形象的說明了半雙工的原理。早期的對講機、以及早期集線器等設備都是基於半雙工的產品。隨着技術的不斷進步,半雙工會逐漸退出。

http與websocket的區別:

http:

經過上面講解,咱們知道http協議是短連接,由於請求以後,都會關閉鏈接,下次從新請求數據,須要再次打開連接。原理簡圖圖下:
服務端向客戶端推送消息技術之websocket的介紹

websocket:

webSocket協議是一種長鏈接,只須要經過一次請求來初始化連接,而後全部的請求和響應都是經過這個TCP連接

進行通信。簡單原理圖以下:
服務端向客戶端推送消息技術之websocket的介紹

各大瀏覽器對websocket支持狀況:
服務端向客戶端推送消息技術之websocket的介紹

服務器要求:

服務器支持狀況:Tomcat 7.0.47+以上才支持。

相關文章
相關標籤/搜索