HTML - WebSockets:初學者指南

你好,未來的網頁開發者們!今天,我們將要深入WebSockets的精彩世界。如果你之前從未聽說過它們,別擔心——到了這個教學的結尾,你將會成為一名WebSocket大師!所以,拿起你喜歡的飲料,放鬆身心,讓我們開始這段旅程。

HTML - WebSocket

WebSockets是什麼?

在我們深入細節之前,讓我們先了解WebSockets是什麼,以及它們為什麼這麼酷。想像你正在和朋友聊天。在一個普通的電話中,你必須撥號,等待他們接聽,說出你想說的話,然後掛斷。如果你想再次說話,你必須重複整個過程。這聽起來很麻煩,對吧?

這就是傳統網頁通信的運作方式。你的瀏覽器發送一個請求,等待回應,然後關閉連接。另一方面,WebSockets就像是一條永遠打開的電話線,你和你的朋友隨時都可以說話,而不需要不斷地撥號和掛斷。酷炫吧?

語法

現在,讓我們看看我們如何在HTML中使用WebSockets。語法出奇地簡單:

<script>
var socket = new WebSocket('ws://example.com/socket');
</script>

在這裡,我們創建了一個新的WebSocket對象,並將其連接到位於'ws://example.com/socket'的服務器。'ws://'部分就像'http://'一樣,但是專門為WebSockets設計的。還有一個安全版本,'wss://',就像'https://'一樣

WebSocket屬性

WebSockets帶有一些方便的屬性,告訴我們當前連接的狀態。讓我們在表中看看它們:

屬性 描述
readyState 連接的當前狀態
bufferedAmount 使用send()方法排隊的數據字節數
extensions 服務器選擇的擴展
protocol 服務器選擇的子協議名稱

readyState屬性特別有用。它可以有四個值:

  1. 0 (CONNECTING):連接尚未打開。
  2. 1 (OPEN):連接已打開,準備通訊。
  3. 2 (CLOSING):連接正在關閉過程中。
  4. 3 (CLOSED):連接已關閉或無法打開。

WebSocket事件

WebSockets不僅關於發送數據——它們還可以回應各種事件。這就像設置派對彩帶,當特定的事情發生時會爆炸一樣!這裡是主要的事件:

  1. onopen:當連接建立時觸發。
  2. onmessage:當從服務器接收到數據時觸發。
  3. onerror:當發生錯誤時觸發。
  4. onclose:當連接關閉時觸發。

讓我們看看我們如何在代碼中使用它們:

<script>
var socket = new WebSocket('ws://example.com/socket');

socket.onopen = function(event) {
console.log('連接建立!');
};

socket.onmessage = function(event) {
console.log('來自服務器的訊息:', event.data);
};

socket.onerror = function(error) {
console.log('WebSocket 錯誤:', error);
};

socket.onclose = function(event) {
console.log('連接關閉。');
};
</script>

在這個例子中,我們設置了函數來處理這些事件。當連接打開時,我們記錄一個訊息。當我們接收到訊息時,我們記錄它。如果發生錯誤,我們也記錄。當連接關閉時,我們說再見!

WebSocket方法

現在我們知道如何監聽事件了,讓我們看看我們如何在WebSocket中實際做事。這裡是主要的方法:

方法 描述
send() 將數據發送到服務器
close() 關閉WebSocket連接

這是我們如何使用這些方法的:

<script>
var socket = new WebSocket('ws://example.com/socket');

// 將訊息發送到服務器
socket.send('你好,服務器!');

// 關閉連接
socket.close();
</script>

這就是這麼簡單!使用send(),我們可以將任何數據我們想要發送到服務器。當我們完成時,我們可以禮貌地使用close()關閉連接。

使用Python設置WebSocket服務器

現在,我知道我們這裡的重點是HTML,但我認為理解對話的雙方是很重要的。所以,讓我們快速看看我們如何使用Python設置一個簡單的WebSocket服務器。別擔心如果你不熟悉Python——這裡的重點是概念。

import asyncio
import websockets

async def echo(websocket, path):
async for message in websocket:
await websocket.send(f"Echo: {message}")

start_server = websockets.serve(echo, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

這個服務器簡單地將任何收到的訊息回傳,前綴為"Echo: "。它運行在本地主機(你自己的電腦)上,端口8765。

為服務器設置HTML客戶端

現在我們有了我們的服務器,讓我們創建一個HTML頁面來連接到它:

<!DOCTYPE html>
<html>
<head>
<title>WebSocket 測試</title>
</head>
<body>
<h1>WebSocket 測試</h1>
<input type="text" id="messageInput" placeholder="輸入一個訊息">
<button onclick="sendMessage()">發送</button>
<div id="messages"></div>

<script>
var socket = new WebSocket('ws://localhost:8765');

socket.onopen = function(event) {
console.log('連接建立!');
};

socket.onmessage = function(event) {
var messages = document.getElementById('messages');
messages.innerHTML += '<p>' + event.data + '</p>';
};

function sendMessage() {
var input = document.getElementById('messageInput');
socket.send(input.value);
input.value = '';
}
</script>
</body>
</html>

這個HTML頁面創建了一個簡單的界面,你可以輸入一個訊息,發送到服務器,並看到回傳的訊息。

這就是全部!我們已經涵蓋了WebSockets的基本知識,從了解它們是什麼,到設置服務器和創建客戶端。記住,WebSockets是關於實時、雙向通信的。它們對於聊天室、實時體育更新或任何需要即時數據交換的情況都完美無缺。

在你繼續網頁開發的旅程時,你會發現WebSockets為你打開了一個全新的世界。所以,請持續練習,持續嘗試,最重要的是,樂在其中!快樂編程!

Credits: Image by storyset