[WebSocket集成XMPP網(wǎng)頁即時通訊]Web應(yīng)用的信息交互過程通常是客戶端通過瀏覽器發(fā)出一個請求,服務(wù)器端接收和審核完請求后進(jìn)行處理并返回結(jié)果給客戶端,然后客戶端瀏覽器將信息呈現(xiàn)出來,這種機(jī)制對于信息變化不是特別頻繁的應(yīng)用尚能相安無事,但是對于那些實時要求比較高的應(yīng)用來說,比如說在線游戲、在線證券、設(shè)備監(jiān)控、新聞在線播報、RSS訂閱推送等等,當(dāng)客戶端瀏覽器準(zhǔn)備呈現(xiàn)這些信息的時候,這些信息在服務(wù)器端可能已經(jīng)過時了。所以保持客戶端和服務(wù)器端的信息同步是實時Web應(yīng)用的關(guān)鍵要素,對Web開發(fā)人員來說也是一個難題。在WebSocket規(guī)范出來之前,開發(fā)人員想實現(xiàn)這些實時的Web應(yīng)用,不得不采用一些折衷的方案,其中最常用的就是輪詢(Polling)和Comet技術(shù)(AJAX)。
但AJAX有顯著缺點:
1、瀏覽器需要不斷的向服務(wù)器發(fā)出請求,然而HTTPrequest的header是非常長的,里面包含的有用數(shù)據(jù)可能只是一個很小的值,這樣會占用很多的帶寬。
2、客戶端和服務(wù)器端的編程實現(xiàn)都比較復(fù)雜,在實際的應(yīng)用中,為了模擬比較真實的實時效果,開發(fā)人員往往需要構(gòu)造兩個HTTP連接來模擬客戶端和服務(wù)器之間的雙向通訊,一個連接用來處理客戶端到服務(wù)器端的數(shù)據(jù)傳輸,一個連接用來處理服務(wù)器端到客戶端的數(shù)據(jù)傳輸。
WebSocketAPI是下一代客戶端-服務(wù)器的異步通信方法。該通信取代了單個的TCP套接字,使用ws或wss(ssl加密)協(xié)議,可用于任意的客戶端和服務(wù)器程序。WebSocket目前由W3C進(jìn)行標(biāo)準(zhǔn)化。WebSocket已經(jīng)受到Firefox4、Chrome4、Opera10.70、Edge以及Safari5等瀏覽器的支持。WebSocketAPI最偉大之處在于服務(wù)器和客戶端可以在給定的時間范圍內(nèi)(IdleTime)的任意時刻,相互推送信息。WebSocket并不限于以Ajax(或XHR)方式通信,因為Ajax技術(shù)需要客戶端發(fā)起請求,而WebSocket服務(wù)器和客戶端可以彼此相互推送信息;XHR受到域的限制,而WebSocket允許跨域通信。
為方便開發(fā),用了Jetty服務(wù)器,在網(wǎng)上很多例子都是基于jetty7.0的。但jetty9.0以后WebSocket的基類代碼變化很多,于是自己動手開發(fā),參考jetty官網(wǎng):
http://www.eclipse.org/jetty/documentation/current/websocket-jetty.html#jetty-websocket-api首先在Eclipse新建一個Dynamicwebproject
請自行下載安裝jetty,另外需要在Eclipse安裝Jetty工具,便于調(diào)試。
web.xml
踩一腳
|