Java WebSocket生命周期


本章將講述WebSocket端點的生命周期。WebSocket端點的生命周期為開發人員提供了一個框架來管理端點所需要的資源,也提供了一個框架來攔截消息。我們將仔細探討其生命周期的順序和語義,以及Java WebSocket API如何提供API和注解來支持處理這些事件。

一、WebSocket協議

    與基於HTTP的技術不同,WebSocket具有生命周期。此生命周期周期由WebSocket協議支撐。WebSocket協議定義了客戶端和服務器長時間存活的專用的TCP連接,一旦連接已經建立,數據的傳輸就可以往返傳輸。WebSocket協議中包含兩種主要類型的幀:控制幀和數據幀。控制幀是用於執行協議的一些內部邏輯的數據傳輸。例如關閉幀(意味着發送者准備關閉連接)、Ping幀(檢查WebSocket對等節點的連接的健康性)。Pong幀(對Ping幀做出回應)。數據幀定義了攜帶應用數據的WebSocket傳輸的種類。數據幀分為兩類:文本型和二進制型(例如,圖像數據)。

二、WebSocket生命周期

    所有Java WebSocket端點生命周期的第一個事件是打開通知,它用來指示到WebSocket會話另一端的連接已經建立。一旦打開通知被WebSocket對話的兩端都接收到,參與的任意WebSocket后續就可以發送消息了。在WebSocket對話期間,可能會出現一些消息傳遞的錯誤。接受消息的WebSocket端點本身就可能產生錯誤,或者WebSocket實現本身在某些情況下也會產生錯誤。要注意對錯誤的處理。不管在WebSocket對話的哪一端准備結束對話,他都可以初始化關閉事件。下面從Java組件的視角來看看其生命周期如何呈現。

  • 打開事件:@OnOpen 此事件發生在端點上建立新連接時並且在任何其他事件發生之前

  • 消息事件:@OnMessage 此事件接收WebSocket對話中另一端發送的消息。

  • 錯誤事件:@OnError 此事件在WebSocket連接或者端點發生錯誤時產生

  • 關閉事件:@OnClose 此事件表示WebSocket端點的連接目前部分地關閉,它可以由參與連接的任意一個端點發出

    你可能已經注意到,我用注解式來說明端點事件處理,這正是WebSocket所推薦的。雖然,你也可以用繼承式來編程這些事件

  1.     @OnOpen 指示當此端點建立新的連接時調用此方法。此事件伴隨着三部分信息:WebSocket Session對象,用於表示已經建立好的連接;配置對象(EndpointConfig的實例),包含了用來配置端點的信息;一組路徑參數,用於打開階段握手時WebSocket端點入站匹配URI。@OnOpen注解的方法是沒有任何返回值的公有方法,這些方法有一個可選的Session參數、一個可選的EndpointConfig參數,以及任意數量的被@PathParam注解的String參數。

  2. @OnMessage 處理入站的消息。java培訓機構里面是這樣講解的,連接上的消息將以3種基本形式抵達:文本消息、二進制消息或者Pong消息。最基本的形式是選擇使用帶String參數的方法來處理文本消息;使用ByteBuffer或者是byte[]參數的方法來處理二進制文本;若你的消息僅僅是處理Pong消息,則可以使用Java WebSocket API中的PongMessage接口的一個實例。當然可以使用一個boolean型參數表示對到來的消息進行分片。當boolean型參數值為false時,表示后續還有整個文本消息序列中的更多消息分片的到來,當設置為true時,表示當前消息是消息分片中最后一個分片。消息的處理還有很多選項,比如使用JavaI/O,甚至可以讓WebSocket實現把入站消息轉換成自己選擇的對象。這個將在消息通信基礎中提到,WebSocket應用一般是異步的雙向消息。因此通過@OnMessage注解的此類方法上有一個額外選項:方法可以有返回值或者返回為空。當使用@OnMessage注解的方法有返回類型時,WebSocket實現立即將返回值作為消息返回給剛剛在方法中處理的消息的發送者。

  3. @OnError 可以處理WebSocket實現處理入站消息時發生的任何異常。處理入站消息時,可能會發生3中基本的錯誤類型。首先,WebSocket實現產生的錯誤可能會發生,這些異常屬於SessionException類型,其次,錯誤可能會發生在當WebSocket實現試圖將入站消息解碼成開發人員所需要的對象時。此類錯誤都是DecodeException類型。最后是由WebSocket端點的其他方法產生的運行時錯誤。WebSocket實現將記錄WebSocket端點操作過程中產生的任何異常。

  4. @OnClose 它對於在WebSocket連接關閉時做其他的通用清理工作。@OnClose 可以用來注解多種不同類型的方法來關閉事件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM