Comet (Reverse Ajax) 讓服務端主動向瀏覽器推送數據,無需客戶端輪詢。本系列實現一個無刷新多人聊天室。
| 維度 | 傳統輪詢 | Comet (長連接) |
|---|---|---|
| 機制 | 客戶端 setInterval 定時發請求 | 服務端保持 HTTP 連接開啟,有數據即推送 |
| 服務器負載 | 大量無效請求 (多數返回「無新數據」) | 連接數佔用線程/文件描述符,但無無效請求 |
| 實時性 | 受輪詢間隔限制 (通常 1-5 秒延遲) | 毫秒級觸達 |
| 擴展性瓶頸 | 高併發下請求風暴 | 傳統 Servlet 一連接一線程,易耗盡線程池 |
| 適用場景 | 低頻、容忍延遲、客戶端數少 | 高實時、中等併發、消息驅動業務 |
startAsync());
[瀏覽器] ←── Comet 長連接 (DWR Reverse Ajax) ──→ [DwrServlet]
│
▼
[Spring 容器]
│ │
[ChatService] [ChatMessageClient]
│ │
發布事件 監聽事件→推送 ScriptBuffer
│
▼
[所有在線 ScriptSession]