javascript
Atmosphere 1.0:支持Java/JavaScript的异步通信框架
Atmosphere 1.0是一個新的Java/Scala/Groovy框架,它試圖將Web瀏覽器與應用服務器之間的通信抽象出來。在Web Socket、HTML5服務器端事件和其他特定于應用服務器的解決方案可用時,該框架可以透明地支持,此外還可將長輪詢作為一種備選方案。
\u0026#xD;\n最初,Web應用程序是采用客戶端/服務器模型構建的,始終由客戶端向服務器發起連接。對于特定類型的應用,如儀表板(Dashboard)、報價器和在線聊天等,它們都需要實時通信功能,而傳統的HTTP請求/響應循環無法滿足其要求。在這些情況下,服務器必須能夠以異步方式(當事件可用時)向客戶端(Web瀏覽器)推送數據。
\u0026#xD;\n隨著基于AJAX 的富互聯網應用(rich internet applications,RIA)的出現,這種需求變得尤為明顯。RIA不再刷新整個頁面,而是采用了一種更為動態的方法,當應用服務器上有新數據可用時,僅更新頁面的某些部分。最基本的解決方案是使用輪詢:客戶端連續不斷地向服務器詢問更新信息(可能基于一定的時間間隔)。這種方法非常簡單,不需要特殊的支持,但是可能存在帶寬方面的問題。而且如果有很多客戶端的話,即使沒有新數據可用,服務器也很容易就不堪重負了。
\u0026#xD;\n異步通信的另一種實現方式是HTTP流(也稱Comet)。這種方案強制瀏覽器連接到服務器,而且在指定時間(也可以不限制時間)內保持連接。當服務器有事件需要推送到瀏覽器時,就可以使用這一持久連接。該方案也有些限制。持久連接是資源密集型的,可能被代理和防火墻意外關閉,而且瀏覽器對連接到每個應用服務器的連接數也有限制。
\u0026#xD;\n以上方法都不是標準的解決方案。本質上,Comet是一個寬泛的術語,包含了遵循上述理念的一些實現。目前已經有些努力致力于WebSocket的標準化。WebSocket是一種新的網絡協議,它從一開始就是為支持異步通信而設計的。然而該協議需要Web瀏覽器和應用服務器雙方提供顯式地支持。只要雙方都支持WebSocket,就可以將HTTP連接“升級”為web socket。針對WebSocket的編程也有其自身的問題,因為當前每種應用服務器都有自己的API,這很容易導致供應商的封閉。
\u0026#xD;\nAtmosphere是一個Java框架(也支持Groovy和Scala),可以作為以上各種方案之上的一個抽象層,使開發者無需處理底層的通信細節,從而將精力集中在實際的業務邏輯上。開發者只需利用統一的Atmosphere API編程即可,由該API在背后提供對以下各場景的支持:
\u0026#xD;\n- WebSocket\u0026#xD;\n
- HTML5 服務器端事件\u0026#xD;\n
- HTTP流/Comet\u0026#xD;\n
- 長輪詢\u0026#xD;\n
- JSONP\u0026#xD;\n
同時,Atmosphere也提供了一個JavaScript模塊(支持jQuery),該模塊位于客戶端,負責將Web瀏覽器的異步支持功能抽象出來。這種抽象的核心理念是控制連接的兩端。詳細文檔參見:支持的應用服務器和瀏覽器(supported application servers and browsers)。
\u0026#xD;\nAtmosphere的主要特性是在可行的情況下(比如可以使用WebSocket),能夠自動選擇最高效的方案,還支持一種備選方案(比如長輪詢)。它也有可能提前發現客戶端和服務器之間支持的方式。請注意:使用Nettosphere時,Atmosphere可以運行在 非servlet的容器中。
\u0026#xD;\n除基本API之外,Atmosphere也提供了一些插件或擴充,能夠與以下框架集成:
\u0026#xD;\n- REST/Jersey\u0026#xD;\n
- GWT/Vaadin\u0026#xD;\n
- Socket.io\u0026#xD;\n
- Spring\u0026#xD;\n
- Guice\u0026#xD;\n
- Wicket\u0026#xD;\n
- PrimeFaces/RichFaces\u0026#xD;\n
更多信息,請訪問該項目的Wiki、示例、FAQ和Javadocs。
\u0026#xD;\n作者Kostis Kapelonis是軟件工程師,專注于企業級應用開發。
\u0026#xD;\n查看英文原文:Atmosphere 1.0: Asynchronous Communication For Java/JavaScript
總結
以上是生活随笔為你收集整理的Atmosphere 1.0:支持Java/JavaScript的异步通信框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让阅读成为一种习惯
- 下一篇: 考验你对《艾尔登法环》地图熟悉度的时候到