精通Java WebSocket應用開發,充分利用先進的通信技術構建動態企業級Web應用。《Java WebSocket編程 開發、部署和保護動態Web應用》一書由Java WebSocket編程專傢撰寫,提供瞭實際的開發策略和詳盡的示例應用。本書詮釋瞭如何設計客戶端/服務器應用、與全雙工消息通信協作、建立連接、創建端點、處理路徑映射以及保護數據。你也將學到如何加密Web傳輸並且使用Java WebSocket增強既有應用。
主要內容
● 使用Java WebSocket API開發Web應用
● 創建和發布注解式端點和編程式端點
● 管理WebSocket端點的生命周期事件
● 維護端點生命周期中可靠的連接
● 管理同步和異步消息通信
● 為復雜消息通信定義編碼和解碼策略
● 配置消息通信超時、大小限製和異常
● 消息路徑映射及將入站URI路由到Web容器
● 保護數據、認證用戶以及加密連接
Danny Coward是Oracle的首席架構師和Web架構師。他是Java EE、Java SE/JavaFX中WebSocket Java API的規範領導者。他在Oracle主導WebSocket工作,他是Java WebSocket編程方麵的權威專傢。
目 錄
第1章 Java WebSocket基本原理 1
1.1 創建第一個WebSocket應用 2
1.1.1 創建WebSocket端點 3
1.1.2 部署端點 5
1.1.3 創建WebSocket客戶端 6
1.2 WebSocket端點 9
1.3 編程式端點 10
1.4 深入Echo示例 17
1.4.1 部署階段 17
1.4.2 接收第一個連接 19
1.4.3 WebSocket消息通信 22
1.5 本章小結 23
第2章 Java WebSocket生命周期 25
2.1 WebSocket協議 26
2.2 Java WebSocket生命周期 27
2.3 Java WebSocket API中的WebSocket生命周期 29
2.3.1 注解式端點事件處理 30
2.3.2 Lifecycle示例 38
2.3.3 編程式端點生命周期 46
2.3.4 實例數目及綫程機製 49
2.4 本章小結 51
第3章 消息通信基礎 53
3.1 消息通信概述 54
3.1.1 發送消息 54
3.1.2 接收WebSocket消息 61
3.2 DrawingBoard應用 73
3.3 消息通信和綫程 94
3.3.1 WebSocket端點綫程和消息通信 94
3.3.2 綫程與編碼器和解碼器的生命周期 95
3.4 本章小結 95
第4章 配置與Session 97
4.1 Session狀態和邏輯端點狀態 98
4.2 Chat示例 99
4.3 配置端點:ClientEndpointConfig和
ServerEndpointConfig 111
4.3.1 提供和訪問端點配置信息 111
4.3.2 配置選項介紹 113
4.3.3 WebSocket子協議和WebSocket擴展 115
4.4 WebSocket Session 123
4.5 本章小結 128
第5章 高級消息處理 129
5.1 檢查連接:Ping和Pong 130
5.2 異步發送WebSocket消息 132
5.2.1 通過Future發送WebSocket消息 133
5.2.2 通過Handler發送WebSocket消息 135
5.2.3 何時通過Future發送以及何時通過Handler發送 136
5.2.4 異步發送超時 137
5.3 消息批處理 138
5.4 緩衝、消息分片和數據幀 140
5.5 保證消息傳遞 142
5.6 發送消息API總結 143
5.7 MessageModes應用 144
5.7.1 MessageModes應用概述 145
5.7.2 查看MessageModes應用的代碼 147
5.7.3 MessageModes應用中需要注意的事情 155
5.8 本章小結 158
第6章 WebSocket路徑映射 159
6.1 URI術語 160
6.2 WebSocket路徑映射 161
6.2.1 精確URI映射 161
6.2.2 URI模闆路徑 164
6.2.3 URI模闆匹配相關的API 167
6.2.4 在運行時訪問路徑信息 173
6.2.5 查詢字符串和請求參數 174
6.2.6 匹配優先級 177
6.3 Portfolio應用 180
6.4 查詢字符串、路徑參數與WebSocket消息 186
6.5 WebSocket路徑映射API總結 188
6.6 本章小結 189
第7章 保護WebSocket服務器端點 191
7.1 安全的概念 192
7.2 Java WebSocket API安全 193
7.2.1 認證 194
7.2.2 授權 199
7.2.3 私有通信 204
7.2.4 Java WebSocket安全API 207
7.3 Stock Account應用 209
7.4 本章小結 217
第8章 Java EE平颱中的WebSocket 219
8.1 Java EE平颱中Java WebSocket的角色 220
8.2 共享Web應用狀態 222
8.2.1 HttpSession與WebSocket Session的關聯 224
8.2.2 HttpSession示例 225
8.3 WebSocket端點使用EJB 230
8.4 新版Chat示例 235
8.5 本章小結 240
前 言
對於Web開發人員迅速發展的工具箱而言,WebSocket協議是一種新的網絡協議。它除瞭作為HTML 5的核心技術外,還被從桌麵到平闆電腦和智能手機的所有主流瀏覽器迅速采用,不過為什麼Web開發人員還要關心另一種網絡技術?
長輪詢
在2000年之前,全世界的多數主流公司都使用Web。在發展中國傢,個人電腦的革命使得大部分傢庭都至少通過一個通道接入互聯網。企業迅速地在互聯網上建立其Web站點,作為一種展示産品和服務的手段,並且作為交付這些産品和服務的一個日益增長的渠道。Web的基本技術(例如HTTP、HTML和JavaScript)推動瞭人們如何與其他人、其學校和其工作地點交互,如何規劃假期,甚至如何購買生活用品的革命。
Web網站從靜態和無趣的目錄式風格不斷發展,開發人員找到瞭新方法使得Web網站更加具有交互性。他們指望在閤適的時候通過為瀏覽者注入有趣的信息並在必要時對頁麵中的信息進行更新來為Web網站添加活力。然而開發人員發現,基本的HTTP及其標記式技術存在著限製。開發人員需要更新股票報價、最新齣價、登錄到同一網站的當前好友列錶、新的處理價以及遊戲結果。同時他們也需要在不依賴用戶的持續交互的情況下完成這些事情。他們需要從Web服務器端發起數據更新,保持Web網站更新、更迷人、更有趣。他們需要Web網站訪問者轉變為其渠道的一個觀察者,並且他們需要訪問者為瞭獲取推送給他們的信息做盡可能少的事情。
在之後的幾年中,開發人員通過各種非正規手段來完成更新一個網站最新的各種類型的信息到所有當前訪問者的任務。最明顯的手段是通過瀏覽器嚮服務器輪詢更新。開發人員將一小段JavaScript嵌入相關的Web頁麵中,強迫瀏覽器以預定的間隔周期刷新整個頁麵。無論獲取的數據是否需要刷新,此方法都將刷新所有的數據。即使除去獲取非必需數據之外,此方法的網絡延遲也是比較明顯的,所以其用戶體驗比較糟糕。
稍微復雜一些的處理方式是使用HTTP Keep Alive機製。在這種機製中,Web頁麵中的JavaScript代碼將保持打開一個長生命周期的HTTP連接,如同一個持續不斷的軟件下載,它將定期地使用新信息進行更新。關於瀏覽器和服務器應保持連接打開多久方麵的巨大差異導緻瞭大量問題。一般情況下,客戶端的瀏覽器將需要頻繁地重新打開連接,而無論其是否從服務器獲取數據。
隨著開發人員接觸這些技術,開發框架(例如Comet和AJAX)逐步開始支持並包含這些基本技術。在某種程度上,它們可以隱藏這些基本技術的一些不足。然而,有兩個基礎問題即使是最好的實現也不能剋服。首先,HTTP是一個發送簡單信息的昂貴的網絡協議。僅僅請求簡單的股票報價更新,連接上下文在每次請求中都會被重新調用:例如限定客戶端和服務器平颱的所有頭信息、認證屬性、負載描述等。其次,更糟糕的是,無論服務器是否有新的信息傳送,都需要建立昂貴的連接。
WebSocket的引入
2009年,WebSocket的引入工作始於一項允許客戶端與服務器建立一個輕量級的連接,並允許雙嚮通信和一個輕量級的內容模型的技術。服務器能夠僅在必要時將數據推送到已連接的客戶端。一旦連接建立後,在每次發送消息時無須重新創建連接上下文,客戶端和服務器都將有辦法發送簡單信息。
不必要的更新的日子即將結束。
為瞭理解輪詢方式如何浪費網絡資源,考慮一個拍賣網站。物品可以發布在網站上,在定義的時間段內,用戶可以對物品進行投標,在投標時間結束後,物品被賣給齣價最高的用戶。在拍賣的整個過程中,任意訪問投標頁麵的用戶都能夠看到當前的齣價並使用此信息來決定更高的齣價。若網站提供一個極其令人滿意的物品來拍賣(一個稍微使用過的iPod,畢竟它是2003年的産品),同時此物品的拍賣時間僅僅隻有一個小時。假設當這個iPod有新的齣價時,網站需要僅僅傳送一個簡短消息,包含新的價格以及可能的一些附加信息(例如,競標者的綫上名稱)。我們估計這些信息總是符閤64個字節。若考慮到所有已登錄的用戶,為瞭獲取新的信息,一些Cookie信息需要在HTTP請求中傳送。連同內容類型頭、可能兩三個特定於應用的頭、內容長度、瀏覽器ID等一起,我們估計頭信息大約為512字節。現在假設平均有100個用戶登錄到此網站,在拍賣過程中平均每30秒有一個新的齣價。假設齣價的頻率並不是平均分布的;在某一時刻,齣價也許相隔幾秒鍾(接近於拍賣時間的結束),而在平時(拍賣時間開始)齣價可能相隔幾分鍾。競標者將希望最近價格信息一直可用,所以他將謹慎地每兩秒鍾刷新一次價格;否則,因為在競標者獲取更新前另一個齣價已完成,當齣價不被通過時,競標者會變得失意。下麵將為瞭獲取更新發送的所有數據進行閤計:
平均每分鍾30次更新,總計60分鍾 = 1800次更新
每次更新帶來大約512字節的頭信息
發送和接收的頭信息總計為:
1800 × 512字節 = 921 600字節 = 900KB
現在,若每次更新包含64字節。同時在此拍賣中,假設有120次齣價。因此所有更新信息為:120 × 64字節 = 7.5KB。
因此,有用數據與重復數據的粗略的效率比計算是7.5 / 900 = 0.8%。
這並不是一個理想的分數,並且在更長時間的拍賣下,我們甚至不知道此效率比是如何降低的。
WebSocket旨在通過僅在建立連接時發送上下文信息,並且在連接建立後允許連接的兩端在攜帶著極少的標識信息的上下文信息的情況下發送消息(即使是同時發送)來顯著增加這種類型的網絡效率。
這樣,連接到Web服務器的Web頁麵能夠僅在服務器決定它們需要更新時纔接收更新。同時當發送此更新時,它不需要使用關於連接的大負載的上下文信息來使得消息的負荷太重。
WebSocket協議介紹
WebSocket協議是一個網絡協議,允許兩個相連的端在一個單一TCP連接上進行全雙工消息通信。對WebSocket的一個閤適的類比是打電話。當打電話時,你通過撥號初始化一個電話呼叫。如果你嘗試呼叫的人通過拿起話筒接受瞭呼叫,連接就已建立。當連接活躍時,如果樂意,雙方可以同時說話(雖然並不推薦此種自由交談),同時即使在說話時雙方也都可以聽到正在說些什麼。這就是全雙工通信的含義所在。不管是否有人在講話,連接一直保持活躍,直到雙方中的一方決定掛斷電話。
在WebSocket的場景中,連接通過HTTP和WebSocket端點交互的方式建立。連接的發起者發送一個專門製定的HTTP請求,其中包含其希望連接的WebSocket端點的URL。它開始活動並被稱為打開階段握手。如果服務器願意接受連接,服務器製定一個稱為打開階段握手響應的特殊的HTTP響應並將其發送迴客戶端。此時,TCP連接可能已經建立,能夠保證WebSocket消息的往返傳遞。連接將一直保持活躍直到任意一方決定終止連接,或者是某些外部因素導緻連接關閉(例如,非活躍期太長導緻超時或者物理網絡的問題)。
盡管沒有任何特定的協議需要部署設置,WebSocket主要用來作為托管在Web服務器上的Web應用和瀏覽器客戶端之間的通信機製。同樣,WebSocket連接可以在網絡間的任意兩端建立,而不必是瀏覽器和Web服務器上。然而,由於技術的起源,WebSocket技術最直接的機會是為靜態Web站點帶來活力,並且能夠很容易地通過實時數據和活動來增強Web網站和Web應用。
在設置中,存在於瀏覽器中的WebSocket是使用已經被W3C標準化的稱為JavaScript WebSocket API的一個JavaScript API創建的。存在於托管在Web網站的Web服務器上的WebSocket可以通過多種語言來開發。WebSocket的普及如此突然,以至於多種不同語言和Web平颱都開始支持它。特彆是,Java平颱已經快速建立瞭對WebSocket的支持。本書的主要關注點是探索這個新的Java API的基礎設施,盡管一些示例將依賴於那些使用JavaScript API來支持WebSocket的代碼。
Java Web Socket API是最近的Java EE 7平颱的核心特性,並且任何已經熟悉用其他Java技術或者基於Java的技術來構建Web應用(例如Java Servlet、JSP、JavaServer Faces或者與這些技術相關的任何其他技術)的Web程序員應該熟悉Java平颱中的WebSocket並且會考慮通過引入此技術為現有或者未來的應用帶來新鮮的和現代的感覺。通過本書,你將學習如何編寫WebSocket應用。還將學習Java WebSocket API的所有主要設施,包括WebSocket應用可用的配置選項和多種消息模式、可以在何處存儲應用狀態、如何配置WebSocket使得它僅可以被安全地訪問,以及如何將WebSocket集成到Java EE應用中。你在本書中每一章所學習的知識都將通過示例應用來演示。
本書共包含8章內容。
第1章:Java WebSocket基本原理
該章深入介紹瞭第一個WebSocket應用:Echo應用。雖然比較簡單,但是介紹瞭Java WebSocket API的主要特性,從而形成瞭本書中其他章節的基礎。
第2章:Java WebSocket生命周期
該章介紹瞭在WebSocket應用中創建的主要組件——WebSocket端點——的生命周期。此生命周期定義瞭一個框架,通過此框架可以管理WebSocket端點使用的資源,並且最重要的是定義瞭如何攔截WebSocket消息。此生命周期通過Lifecycle應用來舉例說明。此示例為用戶展示瞭一係列的交通信號燈,以便強調WebSocket端點生命期中的關鍵階段。
第3章:消息通信基礎
該章使用團體閤作繪圖應用作為其示例應用,介紹瞭Web應用中發送和接收消息的基本方麵。此示例使用Java應用作為客戶端,所以該章也同樣展示瞭Java WebSocket API作為客戶端的用法。
第4章:配置與Session
該章闡述瞭Java WebSocket API中的兩個最重要的對象:WebSocket會話對象和端點配置對象。其中前者錶示一個和WebSocket對等端的會話,後者保存端點的配置信息。在一個在綫聊天的示例應用中,我們使用這些對象說明其特性。
第5章:高級消息處理
該章詳細介紹瞭開發人員用於發送和接收WebSocket消息的所有可用選項。我們以第3章為基礎介紹瞭一些高級話題,例如消息編碼和解碼策略、同步和異步消息模式。該章中的示例應用使用一個用戶界麵來闡明API中可用的消息選項。
第6章:WebSocket路徑映射
該章覆蓋瞭路徑映射的9條規則,講解瞭Java WebSocket API中將WebSocket端點發布到一個URI使得對等節點能夠連接上的所有可用選項。該章使用一個簡單的股票投資組閤示例說明精確路徑匹配、模闆映射、查詢字符串等技術,並且討論瞭你可能選擇某種技術而非另一種技術的各種情況。
第7章:保護WebSocket服務器端點
該章介紹瞭如何將對WebSocket端點的訪問限製為僅是Web應用的某種用戶,還介紹瞭如何確保WebSocket端點間的通信保持為私有。我們迴顧瞭股票投資組閤應用,使用安全技術來保護此應用並且使之個性化。
第8章:Java EE平颱中的WebSocket
該章首先介紹如何將WebSocket端點集成到大規模的Java EE應用中。該章改進瞭第4章中的聊天應用,從而利用Java EE平颱中的兩個關鍵組件:Java Servlet和EJB,提供瞭一些在WebSocket端點和其他Java Web組件之間,以及和企業JavaBean間共享應用信息的方法。
目標讀者對象
本書適閤於如下讀者:
希望為Web應用增加交互特性的Web開發人員
希望和WebSocket服務器應用交互的富客戶端應用開發人員
有興趣為支持HTML5的瀏覽器開發應用的Java EE開發人員
本書假設你具備一些Java編程語言的運用知識、一些Java SE平颱的經驗和一些JavaScript編程語言的知識。此外,盡管不是必要的,但具備一些Web應用的開發經驗可能是有用的。
獲取示例應用
所有的示例應用代碼都可以從Oracle Press網站www. OraclePressBooks.com下載。文件包含在一個壓縮文件中。一旦下載瞭此壓縮文件,就需要解壓其內容。示例運行於Glassfish 4.0應用服務器上。Glassfish 4.0可以從http://glassfish.java.net/免費下載,並且可以使用NetBeans IDE進行構建。NetBeans IDE可以從http://netbeans.org/免費下載。
我希望本書能夠激發你使用前所未有的想法來編寫應用!
創見(Transcend)64GB UHS-I 300X TF(Micro SD)
評分這書有點小,都可以拿在手上瞭!
評分本次購物很不錯
評分搞技術的要充電,買些書來充實一下自己吧
評分給老公買的,書不錯!正版
評分嗯!對我來說挺有用的
評分學習下,瞭解瞭解不熟悉的東西
評分頁數少 小 顯示齣這書貴呀
評分公司的程序員讓買的,應該是比較有用吧
本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 book.qciss.net All Rights Reserved. 圖書大百科 版權所有