WebSocket協定是基於TCP的一種新的網路協定。它實作了瀏覽器與伺服器全雙工(full-duplex)通訊-允許伺服器主動傳送訊息給客戶端。
在實作websocket連線過程中,需要透過瀏覽器發出websocket連線請求,然後伺服器發出回應,這個過程通常稱為「握手」 。在 WebSocket API,瀏覽器和伺服器只需要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。
在先前的訊息推送機制中,用的都是Ajax 輪詢(polling),在特定的時間間隔由瀏覽器自動發出請求,將伺服器的訊息主動的拉回來,這種方式是非常消耗資源的,因為它本質還是http請求,而且顯得非常笨拙。而WebSocket 在瀏覽器和伺服器完成一個握手的動作,在建立連線之後,伺服器可以主動傳送資料給客戶端,客戶端也可以隨時向伺服器發送資料。
建立通訊時,也是由客戶端主動發起連線請求,服務端被動監聽。
通訊一旦建立連線後,通訊就是「全雙工」模式了。也就是說服務端和客戶端都能在任何時間自由得發送數據,非常適合服務端要主動推送即時數據的業務場景。
每一次互動都是:客戶端主動發起請求(request),服務端被動應答(response)。
服務端不能主動向客戶端推送資料。
通訊的資料是基於文字格式的。二進位資料(如圖片等)要利用base64等手段轉換成文字後才能傳輸。 5.WebSocket客戶端:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
40
null
;
alert( host username); ### ######} ######else### ###{ ####### ###### ######alert(######'目前瀏覽器 Not support websocket'######) ####### ######} ####### ### ###
} #
#
setMessageInnerHTML( ); #
# //監聽窗口關閉事件,當窗口關閉時,主動去關閉websocket連接,防止連接還沒斷開就關閉窗口,server端會拋異常。 window.onbeforeunload = function() { closeWebSocket(); #
|
1.核心類別:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
86
90
com.mes.util; import java.io.IOException; java.util.Map; java.util.concurrent.ConcurrentHashMap; import import import import import javax.websocket.Session; javax.websocket.server.PathParam; javax.websocket.server.ServerEndpoint;
org.springframework.stereotype.Component;
( #
private #
String username; #@PathParam #" username" #
this
# ##
#
#"To"
#
onlineCount; synchronized
WebSocket.onlineCount--; public #
顧客; |
2.在自己程式碼中的呼叫: #1 | 2
"message"
| "To"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
##
|
以上是WebSocket實作Java後台訊息推播的原理與基礎知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!