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

Java Web 即時聊天實現方案:WebSocket 與長輪詢對比

     編輯:程式設計綜合問答

現狀

使用 setInterval 輪詢獲取新訊息,頻繁請求浪費資源。

方案一:WebSocket(HTML5 標準,推薦)

  • 全雙工長連線,伺服器主動推送,零輪詢延遲。
  • 瀏覽器支援:IE10+、所有現代瀏覽器。
  • Java 端:javax.websocket (JSR 356) + Tomcat 7.0.47+ / Jetty 9+ / WildFly。
  • 程式碼骨架:
    
    // ServerEndpoint
    @ServerEndpoint("/chat/{room}")
    public class ChatEndpoint {
        @OnMessage public void onMessage(String msg, Session s) {
            // 廣播給同房間其他 session
            s.getOpenSessions().forEach(sess -> {
                if (!sess.equals(s)) sess.getBasicRemote().sendText(msg);
            });
        }
    }
    

方案二:Server-Sent Events (SSE)

  • 單向伺服器→客戶端推送,基於 HTTP,自動重連,IE 不支援(需 polyfill)。
  • 適合單向通知(股票、公告),雙向聊天需配合 AJAX 發送。

方案三:長輪詢—— 傳統相容方案

  • 客戶端發請求 → 伺服器有新訊息才回應 → 客戶端處理後立即發下一請求。
  • 減少空回應,但仍需維持連線,伺服器需非阻塞 I/O (Servlet 3.0 Async / Netty)。

選型建議

場景推薦
新專案、現代瀏覽器WebSocket
需支援 IE9/舊環境長輪詢 + Servlet Async
單向廣播、簡單部署SSE

原答案核心

「第一種方案:用HTML5... 第二種方案:用websocket...」

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