999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

使用Websocket和Servlet實現服務器定點推送

2016-05-30 10:48:04錢宇虹
軟件工程 2016年10期

錢宇虹

摘 要:針對Java Web實時系統中的消息推送這一關鍵問題,本文基于Tomcat8和WebSocket標準,提出并且實現了一個服務端定點推送模型,能夠向指定的Web注冊用戶進行消息推送。該模型具有非廣播的特點,即在沒有瀏覽器請求的情況下通過Servlet主動將消息推送至某個已注冊的Web用戶。該模型已經成功地應用于呼叫中心系統中將電話分機狀態和彈屏信息推送給Web坐席,該模型也可以用于即時消息、游戲應用、實時證券報價、股票系統等Web實時系統,具有廣泛的使用價值。

關鍵詞:Tomcat8;WebSocket;定點推送

中圖分類號:TP311 文獻標識碼:A

1 引言(Introduction)

眾所周知,HTTP協議是基于請求-響應模式的無狀態的單向協議,即每次都要由客戶端(如瀏覽器)主動向服務端發出“請求”,服務端做出處理后將結果作為“響應”返回給客戶端。“無狀態”指的是每次的請求-響應都必須經歷建立連接和釋放連接的過程,前一次連接和后一次連接相互之間沒有關系。“單向”指的是客戶端是主動方,服務端是被動方,服務端不能主動向客戶端發送數據。HTTP協議的這一特點對傳統的Web應用,像電子商務網站、搜索引擎等等非常合適,但是不能滿足日益增強的實時性需求的Web應用,這些應用要求在無需客戶端發出請求的前提下,服務端能實時地將信息主動推送到客戶端,如基于Web的聊天系統、即時消息、游戲應用、實時證券報價和股票系統等。

過去,針對實時性較強的應用,開發人員使用輪詢和Comet技術這些折中方案。輪詢就是客戶端按照預先設置的時間間隔向服務端發送請求,周期性地查詢是否有數據更新。早期的輪詢是通過在HTML頭部插入META元信息來實現網頁的自動刷新,后來人們使用AJAX輪詢。AJAX輪詢帶來的最大好處就是在不刷新整個頁面的前提下可以實現網頁的局部更新,既提高了做事的效率又增強了用戶體驗,但是AJAX還是受限于請求-響應模式,由于無法預期什么時候推送消息,造成很多無效的請求。而Comet是使用一種新的技術去做輪詢得到的效果,這種技術雖然可以實現雙向通信,但是依然需要發出請求,而且Comet普遍采用長連接,這會導致大量消耗服務器帶寬和資源。Comet技術本質上還是沒有擺脫HTTP請求-響應模式,不能算是真正意義上的雙向通信,并且開發復雜度也較高。

隨著HTML5推出WebSocket,為真正解決服務器推送提供了技術保障。該規范旨在瀏覽器中實現和服務器端的雙向通信,用以拓展瀏覽器上的應用類型,如實時監控系統[1]、校園通知系統[2]。WebSocket規范實際上由兩部分組成,一部分是瀏覽器中的WebSocket API,由W3C制訂;一部分是WebSocket協議,由IETF制訂。它引入WebSocket接口,在WEB上通過一個單一的套接字(Socket)定義了一個全雙工的通信通道,與通過維持兩個連接來模擬全雙工通信的輪詢和長輪詢方案相比,WebSocket大幅降低了不必要的網絡流量和延遲[3]。WebSocket是為解決WEB客戶端與服務端實時通信而產生的技術,協議設計的一個重要原則就是能和現有的Web方式和睦共處,其本質是首先通過HTTP/HTTPS協議進行握手后創建一個用于交換數據的TCP連接,此后WEB客戶端與服務端就此TCP連接進行實時通信[4]。

2 Tomcat8對WebSocket的支持(Tomcat8 support

for WebSocket)

WebSocket在瀏覽器端的實現遵循標準的HTML5,這個和服務器采用Tomcat或者Jetty是無關的,標準化的形式是WebSocket JavaScript API[5],主流的瀏覽器上都得到很好的支持,所以通過JavaScript書寫Web客戶端的代碼既標準也較為簡單。值得大家注意的是服務器端的實現在形成統一標準之前,各個實現都有自己的一套API,所以使用WebSocket開發服務器端存在一定的風險。

Tomcat7.0.27是Tomcat支持WebSocket的第一個版本,其關鍵是提供了org.apache.catalina.websocket.WebSocketServlet接口,在Tomcat7.0.27中需要一個Servlet來處理WebSocket請求,這個Servlet要繼承自WebSocketServlet這個類,然后實現createWebSocketInbound方法,該方法返回StreamInbound對象。這個接口是非標準的WebSocket實現,到Tomcat8中,WebSocketServlet和StreamInbound這兩個類都過期了,所以基于Tomcat7.0.27來實現服務器推送的技術在這里不再贅述[6]。

在Java社區技術的進步常常經歷這樣的階段,就是不同的供應商和開發人員編寫類庫實現某種技術,隨著時間的推移當該技術成熟時它就被標準化,使得開發者能夠在不同的實現之間相互操作,避免冒鎖定特定供應商的風險。JSR356就是把WebSocket的Java API進行標準化的結果,它已經成為JavaEE 7標準的一部分,這意味著所有JavaEE 7兼容的應用服務器都遵守JSR356的WebSocket協議標準。

Tomcat8是真正支持JSR356標準的,它自帶的WebSocket API包是在Tomcat8安裝目錄下的lib目錄中的websocket-api.jar[7],我們需要此jar包設置到項目的classpath中。在Tomcat8中使用WebSocket的代碼如下:

(1)Web客戶端(JavaScript代碼,與服務器類型無關)

...……
icp

主站蜘蛛池模板: 麻豆AV网站免费进入| 日本午夜在线视频| 久久精品国产91久久综合麻豆自制| 99热最新网址| 中国国产一级毛片| 一级毛片在线播放| 国产真实乱子伦视频播放| 亚洲av无码片一区二区三区| 国产伦片中文免费观看| 久草视频一区| 99热在线只有精品| 日韩精品一区二区三区视频免费看| www亚洲天堂| 国产精品免费电影| 久视频免费精品6| 草草影院国产第一页| 国产精品永久久久久| 毛片视频网址| 黄色在线不卡| 亚洲欧美一区二区三区图片| 久久精品无码中文字幕| 无码专区国产精品一区| 国产精品成人一区二区不卡| 久久一色本道亚洲| 亚洲天堂网2014| 亚洲精品成人福利在线电影| 国产资源免费观看| 日本一区二区三区精品国产| 高潮爽到爆的喷水女主播视频| 日韩欧美国产成人| 午夜激情婷婷| 成人在线不卡视频| 亚洲精品中文字幕无乱码| 综合成人国产| 国产精品原创不卡在线| 亚洲视频黄| 国产精品大白天新婚身材| 91精品国产一区| 综合色区亚洲熟妇在线| 大陆国产精品视频| 亚洲国产欧洲精品路线久久| 88国产经典欧美一区二区三区| 国产av一码二码三码无码| 免费午夜无码18禁无码影院| 久久免费精品琪琪| 91在线一9|永久视频在线| 国产成人三级在线观看视频| 美女视频黄又黄又免费高清| 一级看片免费视频| 国产美女精品在线| 亚洲国产成人在线| 亚洲精品自在线拍| 欧美特级AAAAAA视频免费观看| www.精品国产| 久久国产精品嫖妓| 国产精品人莉莉成在线播放| 在线看AV天堂| 日本午夜在线视频| 日韩精品一区二区三区swag| 亚洲成a人在线播放www| 日韩欧美国产另类| 老熟妇喷水一区二区三区| 国产69精品久久久久孕妇大杂乱 | 久久美女精品| 国产精品久久久久婷婷五月| 2021无码专区人妻系列日韩| 尤物在线观看乱码| 亚洲VA中文字幕| 亚洲熟妇AV日韩熟妇在线| 91九色国产porny| 91精品国产91久无码网站| 精品人妻一区二区三区蜜桃AⅤ| 91亚洲免费| 国产精品久久久久久久伊一| 国内99精品激情视频精品| 亚洲欧美激情小说另类| 老司机午夜精品网站在线观看| 麻豆精品视频在线原创| 无码视频国产精品一区二区 | 91精品久久久无码中文字幕vr| 国产视频a| 色天堂无毒不卡|