程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> Spring整合DWR comet 實現無刷新 多人聊天室(1)

Spring整合DWR comet 實現無刷新 多人聊天室(1)

編輯:J2EE

用dwr的comet(推)來實現簡單的無刷新多人聊天室,comet是長連接的一種。通常我們要實現無刷新,一般會使用到Ajax。AJax 應用程序可以使用兩種基本的方法解決這一問題:一種方法是浏覽器每隔若干秒時間向服務器發出輪詢以進行更新,另一種方法是服務器始終打開與浏覽器的連接並在數據可用時發送給浏覽器。第一種方法一般利用setTimeout或是setInterval定時請求,並返回最新數據,這無疑增加了服務器的負擔,浪費了大量的資源。而第二種方法也會浪費服務器資源,長期的建立連接;而相對第一種來說,第二種方式會更優於第一種方法;這裡有一個一對多和多對一的關系,而comet向多個客戶端推送數據就是一對多的關系。而具體使用哪種方式,要看你當前的需求而定,沒有絕對的。

為什麼使用Comet?

輪詢方法的主要缺點是:當擴展到更多客戶機時,將生成大量的通信量。每個客戶機必須定期訪問服務器以檢查更新,這為服務器資源添加了更多負荷。最壞的一種情況是對不頻繁發生更新的應用程序使用輪詢,例如一種 AJax 郵件 Inbox。在這種情況下,相當數量的客戶機輪詢是沒有必要的,服務器對這些輪詢的回答只會是 “沒有產生新數據”。雖然可以通過增加輪詢的時間間隔來減輕服務器負荷,但是這種方法會產生不良後果,即延遲客戶機對服務器事件的感知。當然,很多應用程序可以實現某種權衡,從而獲得可接受的輪詢方法。

盡管如此,吸引人們使用 Comet 策略的其中一個優點是其顯而易見的高效性。客戶機不會像使用輪詢方法那樣生成煩人的通信量,並且事件發生後可立即發布給客戶機。但是保持長期連接處於打開狀態也會消耗服務器資源。當等待狀態的 servlet 持有一個持久性請求時,該 servlet 會獨占一個線程。這將限制 Comet 對傳統 servlet 引擎的可伸縮性,因為客戶機的數量會很快超過服務器棧能有效處理的線程數量。

如果本示例結合Jetty應用服務器效果會更好。

開發環境:

System:Windows

WebBrowser:IE6+、Firefox3+

JavaEE Server:tomcat5.0.2.8、tomcat6

IDE:eclipse、MyEclipse 8

開發依賴庫:

JavaEE5、Spring 3.0.5、dwr 3

Email:[email protected]

Blog:http://blog.csdn.Net/IBM_hoojo or http://hoojo.cnblogs.com/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved