天天看點

Java學習筆記一Tomcat 8.5 的WebSocket 支援

隻要伺服器端有了新資料,服務端就可以直接将資料推送給浏覽器,讓浏覽器顯示最新的狀态。WebSocket 規範己經相當成熟,而且各種主流浏覽器(如Firefox 、Chrome 、Safari 、Opera 等)都己經支援Web Socket 技術, Java EE 規範則提供了Web Socket 服務端規範,而Tomcat 8.5 則對該規範提供了優秀的實作。使用Tomca t 8.5 開發Web Socket 服務端非常簡單,大緻有如下兩種方式。

Java學習筆記一Tomcat 8.5 的WebSocket 支援

開發被@ServerEndpoint 修飾的Java 類之後,該類中還可以定義如下方法。

Java學習筆記一Tomcat 8.5 的WebSocket 支援

案例

下面将基于WebSocket 開發一個多人實時聊天的程式,該程式的思路很簡單一一在這個程式中,每個客戶所用的浏覽器都與伺服器建立一個WebSocket ,進而保持實時連接配接,這樣用戶端的浏覽器可以随時把資料發送到伺服器端:當伺服器收到任何一個浏覽器發送來的消息之後, 将該消息依次向每個用戶端浏覽器發送一遍。圖2 .54 顯示了基于WebSocket 的多人實時聊天示意圖。

Java學習筆記一Tomcat 8.5 的WebSocket 支援

為了實作圖2.54 所示的示意圖,按如下步驟開發Web Socket 服務端程式即可。

Java學習筆記一Tomcat 8.5 的WebSocket 支援
Java學習筆記一Tomcat 8.5 的WebSocket 支援
Java學習筆記一Tomcat 8.5 的WebSocket 支援
Java學習筆記一Tomcat 8.5 的WebSocket 支援

上面程式中第一行粗體字代碼建立了一個WebSocket 對象(WebSocket 是HTML 5 規範新增的類),建立對象時指定WebSocket 服務端的位址。一旦程式得到了WebSocket 對象, 接下來程式即可調用WebSocket 的send方法向伺服器發送消息。除此之外, 還可以為WebS ocket 綁定如下三個事件處理函數。

Java學習筆記一Tomcat 8.5 的WebSocket 支援

該ChatEntpoint 類并不是真正的Web Socket 服務端,它隻實作了Web Socket 服務端的核心功能, Tomcat 會調用它的方法作為WebSocket 服務端。是以, Tomcat 會為每個We bSocket 用戶端建立一個ChatEntpoint 對象,也就是說,有一個Web Socket 用戶端,程式就有一個ChatEntpoint 對象。是以上面程式中clientSet 集合儲存了多個ChatEntpoint 對象,其中每個ChatEndpoint 對象對應一個WebSocket 用戶端。

Java學習筆記一Tomcat 8.5 的WebSocket 支援
Java學習筆記一Tomcat 8.5 的WebSocket 支援
Java學習筆記一Tomcat 8.5 的WebSocket 支援