WebSocket 教學:用 Python 與 JavaScript 建一個即時聊天室
聊天室、協作編輯、即時看盤,這些功能的共通點是伺服器要能主動把資料推給瀏覽器,而不是等瀏覽器來問。HTTP 的請求-回應模型做不到這件事,硬要做就得靠輪詢,每隔幾秒打一次 API,既浪費頻寬又有延遲。WebSocket 就是為了解決這個問題而生的:一條 TCP 連線上跑全雙工通訊,兩邊都能隨時送資料。 這篇用 Python 寫後端、原生 JavaScript 寫前端,建一個能在多個瀏覽器分頁之間互傳訊息的聊天室。程式碼都是可以直接跑的,而且特別避開了 websockets 套件新版本上的幾個地雷——網路上很多教學還在用舊版 API,照抄到新環境會直接報錯。 WebSocket 到底是什麼WebSocket 是一個獨立的網路協定(ws:// 或加密的 wss://),握手階段借用 HTTP 升級連線,握手完成後就脫離 HTTP,變成一條雙向的長連線。 跟輪詢比起來,它的好處很實際: 伺服器能主動推播,不必等客戶端發問 連線建立後省掉每次 HTTP 標頭的開銷 延遲低,適合聊天、通知、即時資料這類場景 要注意的是 WebSocket 不會自動重連,連線斷了就是斷了,這部分要自己處...
WebSocket通訊過程詳解
WebSocket通訊的握手、傳輸、心跳到關閉,底層到底在做什麼?這篇把整個過程拆開來看。 WebSocket是什麼?WebSocket是一種網路通訊協定,能在瀏覽器和伺服器之間建立全雙工的通訊管道。傳統HTTP是請求—回應模式,每次都要重新建立連線;WebSocket一旦握手完成,雙方就可以隨時互相傳送訊息,連線一直維持著。 WebSocket通訊過程1. 建立連線客戶端(通常是瀏覽器)先發出一個普通的 HTTP GET 請求,帶上升級用的標頭: 1234Upgrade: websocketConnection: UpgradeSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==Sec-WebSocket-Version: 13 Sec-WebSocket-Key 是瀏覽器隨機產生的 16 bytes,經 base64 編碼後放進去,作用是讓伺服器證明它確實理解 WebSocket 協定。 2. 伺服器回應伺服器若支援 WebSocket,回傳 HTTP 101(Switching Protocols): 123Upgrade: websoc...




