HTML5 WebSocket API 提供了一種在單個連接上進行全雙工通信的方式。這意味著客戶端和服務器可以同時發送和接收數據,而不需要像傳統的 HTTP 請求那樣進行多次請求和響應的輪詢。WebSocket 允許更實時的交互,非常適合需要快速、連續數據交換的應用場景,如在線游戲、實時通訊和股票行情更新等。
以下是使用 WebSocket 的基本步驟:
-
創建 WebSocket 對象:
創建一個新的 WebSocket 對象,指定服務器的 URL。var ws = new WebSocket('ws://example.com/socketserver');
-
連接到服務器:
當 WebSocket 對象創建后,它會自動嘗試連接到指定的服務器。連接成功后,會觸發onopen
事件。ws.onopen = function(event) {console.log('Connection open ...');// 可以在這里發送消息到服務器ws.send('Hello Server!'); };
-
接收服務器消息:
當服務器發送消息時,會觸發onmessage
事件。ws.onmessage = function(event) {console.log('Message from server:', event.data); };
-
發送消息到服務器:
使用send
方法向服務器發送數據。ws.send('Hello Server!');
-
處理錯誤:
當連接過程中發生錯誤時,會觸發onerror
事件。ws.onerror = function(error) {console.error('WebSocket Error:', error); };
-
關閉連接:
使用close
方法關閉 WebSocket 連接。ws.close();
-
處理關閉事件:
當連接關閉時,會觸發onclose
事件。ws.onclose = function(event) {console.log('Connection closed'); };
-
重連機制:
在某些情況下,可能需要實現自動重連機制,比如在連接斷開時嘗試重新連接。function connect() {ws = new WebSocket('ws://example.com/socketserver');ws.onopen = function(event) {// ...};ws.onclose = function(event) {// 嘗試重連console.log('Attempting to reconnect...');setTimeout(connect, 1000);};// ... }
WebSocket 還支持子協議,允許客戶端和服務器之間協商使用特定的通信協議。此外,還有 Sec-WebSocket-Protocol
和 Sec-WebSocket-Extensions
等 HTTP 頭部用于協商這些子協議和擴展。
請注意,WebSocket 連接是持久的,但它們可能會因為多種原因而斷開,例如網絡問題、服務器重啟或客戶端關閉。因此,實現適當的錯誤處理和重連邏輯是很重要的。