|
英文原文:Reverse Ajax, Part 2: WebSockets
這一文章系列探討了如何使用反向Ajax(Reverse Ajax)技術來開發事件驅動的web應用,第1部分內容介紹了實現反向Ajax通信的幾種不同方式:輪詢(polling)、捎帶(piggyback)以及使用了長輪詢(long-polling)和流(streaming)的Comet。在本文中,我們學習一種新的實現反向Ajax的技術:使用WebSocket,一個新的HTML5 API。WebSocket可由瀏覽器廠商來做本地化實現,或是通過把調用委托給隱藏的被稱為FlashSocket的Flash組件這種橋接手段來實現。本文還討論了反向Ajax技術帶來的一些服務器端約束。
前言
時至今日,用戶期待的是可通過web訪問快速、動態的應用。這一文章系列展示了如何使用反向Ajax(Reverse Ajax)技術來開發事件驅動的web應用。該系列的第1部分介紹了反向Ajax、輪詢(polling)、流(streaming)、Comet和長輪詢(long polling)。你已經了解了Comet是如何使用HTTP長輪詢的,這是可靠地實現反向Ajax的最好方式,因為現有的所有瀏覽器都提供支持。
在本文中,我們將學習如何使用WebSocket來實現反向Ajax。代碼例子被用來幫助說明WebSocket、FlashSocket、服務器端約束、請求作用域(request-scoped)服務以及暫停長生存期請求等,你可以下載本文中用到的這些源代碼。
前提條件
理想情況下,要充分體會本文的話,你應該對JavaScrpit和Java有一定的了解。本文中創建的例子是使用Google Guice來構建的,這是一個使用Java編寫的依賴注入框架。若要讀懂文中所談內容,你應該要熟悉諸如Guice、Spring或是Pico一類的依賴注入框架的概念。
若要運行本文中的例子,你還需要最新版本的Maven和JDK(參見參考資料)。
WebSocket
在HTML5中出現的WebSocket是一種比Comet還要新的反向Ajax技術,WebSocket啟用了雙向的全雙工通信信道,許多瀏覽器(Firefox、Google Chrome和Safari)都已對此做了支持。連接是通過一個被稱為WebSocket握手的HTTP請求打開的,其用到了一些特殊的報頭。連接會保持在活動狀態,你可以使用JavaScript來寫入和接收數據,就像是在使用一個原始的TCP套接口一樣。
WebSocket URL的起始輸入是ws://或是wss://(在SSL上)。
圖1中的時間線說明了使用WebSocket的通信。一個帶有特定報頭的HTTP握手被發送到了服務器端,接著在服務器端或是客戶端就可以通過JavaScript來使用某種套接口(socket)了,這一套接口可被用來通過事件句柄異步地接收數據。
圖1. 使用WebSocket的反向Ajax
本文可下載的源代碼中有一個WebSocket例子,在運行該例子時,你應該會看到類似清單1的輸出。其說明了客戶端的事件是如何發生的,以及如何會立即在客戶端顯示出來。當客戶端發送一些數據時,服務器端回應客戶端的發送行為。
清單1. JavaScript中的WebSocket例子
[client] WebSocket connection opened[server] 1 events
[event] ClientID =0
[server] 1 events
[event] At Fri Jun 1721:12:01 EDT 2011
[server] 1 events
[event] From 0 : qqq
[server] 1 events
[event] At Fri Jun 1721:12:05 EDT 2011
[server] 1 events
[event] From 0 : vv
it知識庫:反向Ajax,第2部分:WebSocket,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。