使用 setInterval 輪詢獲取新訊息,頻繁請求浪費資源。
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);
});
}
}
| 場景 | 推薦 |
|---|---|
| 新專案、現代瀏覽器 | WebSocket |
| 需支援 IE9/舊環境 | 長輪詢 + Servlet Async |
| 單向廣播、簡單部署 | SSE |
「第一種方案:用HTML5... 第二種方案:用websocket...」