首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Spring + DWR Comet 實現無刷新多人聊天室(一):Comet 原理、輪詢對比與技術選型依據

     編輯:J2EE

Comet:服務端推技術的長連接實現

Comet (Reverse Ajax) 讓服務端主動向瀏覽器推送數據,無需客戶端輪詢。本系列實現一個無刷新多人聊天室。

兩種實時方案對比

維度傳統輪詢Comet (長連接)
機制客戶端 setInterval 定時發請求服務端保持 HTTP 連接開啟,有數據即推送
服務器負載大量無效請求 (多數返回「無新數據」)連接數佔用線程/文件描述符,但無無效請求
實時性受輪詢間隔限制 (通常 1-5 秒延遲)毫秒級觸達
擴展性瓶頸高併發下請求風暴傳統 Servlet 一連接一線程,易耗盡線程池
適用場景低頻、容忍延遲、客戶端數少高實時、中等併發、消息驅動業務

Comet 的擴展性挑戰與應對

  • 傳統 Servlet (阻塞 I/O) 下,每個 Comet 連接佔用一線程 → 1 萬連接需 1 萬線程,OS/容器難支撐;
  • 解決路徑:非阻塞 I/O + Continuation/Async Servlet (Jetty 9+, Servlet 3.0+ startAsync());
  • 本示例為教學演示,採用 Tomcat + DWR 內置 Comet 支援;生產強烈建議 Jetty / Undertow / Netty 等原生非阻塞容器。

技術棧與環境

  • 規範:Java EE 5、Spring 3.0.5、DWR 3;
  • 容器:Tomcat 5.5/6.0 (演示)、Jetty (生產推薦);
  • 瀏覽器:IE6+、Firefox 3+ (現代瀏覽器均支援);
  • IDE:Eclipse / MyEclipse 8。

架構總覽

[瀏覽器] ←── Comet 長連接 (DWR Reverse Ajax) ──→ [DwrServlet]
                                                      │
                                                      ▼
                                            [Spring 容器]
                                              │           │
                                    [ChatService]  [ChatMessageClient]
                                              │           │
                                    發布事件      監聽事件→推送 ScriptBuffer
                                                      │
                                                      ▼
                                            [所有在線 ScriptSession]

系列規劃

  1. 原理與選型 (本篇);
  2. 專案搭建、web.xml、基礎配置;
  3. 領域模型、事件、服務層;
  4. 監聽器推送邏輯、Spring/DWR 整合配置;
  5. 前端 chat.jsp、JavaScript 交互、運行驗證。

聯繫作者:hoojo_@126.com | 博客:CSDN / 博客園

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved