推播式聊天室不依賴瀏覽器定時刷新,而是由伺服器主動向客戶端寫入內容。本文系統闡述其底層原理:HTTP 協議模擬、並發伺服器模型、Java 管道通訊、守護進程與斷線檢測機制。
僅需解析請求首行 GET /path HTTP/1.0,回應格式:
HTTP/1.0 200 OK
Content-Type: text/html
<html><body>...持續串流內容... (無結尾標籤)
瀏覽器視為持續下載大頁面,進度條常駐,實現推播視覺效果。
while(true) {
Socket s = serverSocket.accept();
new ThreadedChatHandle(s).start();
}
注意:Linux 下 Java 執行緒映射為原生進程,仍屬多進程模型本質。
聊天內容長度可控,採用 GET 簡化解析,參數附於 URL。建議對提交內容進行 HTML 編碼改善可讀性。
所有發言存入記憶體管道 (PipedInputStream/PipedOutputStream),輸出執行緒讀取廣播。優勢:最高效能、無同步鎖爭用、避免資料庫/檔案 I/O 開銷。僅保留最近 100 條訊息即可滿足需求。
<!-- keep-alive --> 維持連接活性。