天天看點

伺服器如何向手機端推送資訊嗎,服務端向用戶端推送消息技術之websocket的介紹...

websocket的介紹

在講解WebSocket前,我們先來看看下面這種場景,在HTTP協定下,怎麼實作。

需求:

在網站中,要實作簡單的聊天,這種情況怎麼實作呢?如下圖:

伺服器如何向手機端推送資訊嗎,服務端向用戶端推送消息技術之websocket的介紹...

當發送私信的時候,如果要求實時同步的話,可以先讓消息入庫,等對方登陸之後,查詢顯示即可。如下圖:

伺服器如何向手機端推送資訊嗎,服務端向用戶端推送消息技術之websocket的介紹...

可是現在,需要實時消息,怎麼辦?

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

伺服器如何向手機端推送資訊嗎,服務端向用戶端推送消息技術之websocket的介紹...

雖然這樣可以實作,我們可以看到,每隔一定時間,就會去調用伺服器接口,查詢一次。這樣很浪費系統資源的。我們來看看HTTP協定:

伺服器如何向手機端推送資訊嗎,服務端向用戶端推送消息技術之websocket的介紹...

如上圖:

用戶端和伺服器建立連接配接後,發送請求資料給伺服器;

伺服器接收請求後,處理完成并更加請求傳回響應的呼作為回應;

用戶端得到資料後,與伺服器斷開連接配接。

這就是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協定是短連結,因為請求之後,都會關閉連接配接,下次重新請求資料,需要再次打開連結。原理簡圖圖下:

伺服器如何向手機端推送資訊嗎,服務端向用戶端推送消息技術之websocket的介紹...

websocket:

webSocket協定是一種長連接配接,隻需要通過一次請求來初始化連結,然後所有的請求和響應都是通過這個TCP連結

進行通訊。簡單原理圖如下:

伺服器如何向手機端推送資訊嗎,服務端向用戶端推送消息技術之websocket的介紹...

各大浏覽器對websocket支援情況:

伺服器如何向手機端推送資訊嗎,服務端向用戶端推送消息技術之websocket的介紹...

伺服器要求:

伺服器支援情況:Tomcat 7.0.47+以上才支援。

歡迎關注凱哥:凱哥Java(kaigejava)