需求:兩個獨立網頁 A 和 B,用戶在 A 頁面輸入信息,B 頁面無需刷新即可實時展示。這是典型的「實時雙向/單向數據同步」場景,傳統 JSP 單向請求響應模型難以勝任,需引入長連接或輪詢機制。
spring-boot-starter-websocket,或 Node.js ws 库,建立 /ws/sync 端點。new WebSocket(url),onmessage 發送輸入內容。onmessage 直接渲染 DOM。EventSource API。Content-Type: text/event-stream 持續輸出數據。setInterval(fetch('/api/latest')) 請求最新數據。// 後端 Spring Boot 配置類
@Configuration @EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new SyncHandler(), "/ws/sync").setAllowedOrigins("*");
}
}
// 處理器
public class SyncHandler extends TextWebSocketHandler {
private static final Set<WebSocketSession> sessions = ConcurrentHashMap.newKeySet();
@Override public void afterConnectionEstablished(WebSocketSession session) { sessions.add(session); }
@Override public void handleTextMessage(WebSocketSession session, TextMessage message) {
sessions.forEach(s -> { try { s.sendMessage(message); } catch (IOException ignored) {} });
}
@Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) { sessions.remove(session); }
}
前端 A/B 只需幾行 JS 即可雙向同步。選型建議:新項目優先 WebSocket;單向廣播可用 SSE;維舊項目或受限環境用輪詢過渡。