使用 JavaScript 的 WebSocket 用戶端
在本系列的上一篇文章「使用 JavaScript 和 Bun 的 WebSocket」中,我們探討如何初始化能夠處理 HTTP 請求和 WebSocket 連線的伺服器。
我們為 HTTP 請求定義了一條規則,以便在向 / 發出請求時提供 index.html 檔案。 index.html 檔案包含用於與 WebSocket 伺服器建立連線並作為客戶端傳送訊息的用戶端邏輯。
客戶端程式碼
在「WebSocket with JavaScript and Bun」中解釋的伺服器的 fetch 方法中實作了以下程式碼:
if (url.pathname === "/") return new Response(Bun.file("./index.html"));
這表示當瀏覽器要求 http://localhost:8080/ 時,index.html 檔案的內容將會傳送到瀏覽器。
HTML 將呈現一個帶有輸入文字和按鈕的簡單表單,並提供作為用戶端連接到 WebSocket 伺服器的邏輯。
<!doctype html> <html> <head> <title>WebSocket with Bun and JavaScript</title> <script> let echo_service; append = function (text) { document .getElementById("websocket_events") .insertAdjacentHTML("beforeend", "<li>" + text + ";</li>"); }; window.onload = function () { echo_service = new WebSocket("ws://127.0.0.1:8080/chat"); echo_service.onmessage = function (event) { append(event.data); }; echo_service.onopen = function () { append("? Connected to WebSocket!"); }; echo_service.onclose = function () { append("Connection closed"); }; echo_service.onerror = function () { append("Error happens"); }; }; function sendMessage(event) { console.log(event); let message = document.getElementById("message").value; echo_service.send(message); } </script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css" /> </head> <body> <main> <h2> Explaining the client code </h2> <p>This code creates a simple <strong>WebSocket client</strong> in a browser to interact with a WebSocket server. Here's a detailed explanation of its components:</p> <hr> <h3> The HTML structure </h3> <pre class="brush:php;toolbar:false"><!doctype html> <html> <head> <title>WebSocket with Bun and JavaScript</title> </head> <body> <main> <ul> <li>The input field (<input> <li>The submit button (<input type="button">): when clicked, it triggers the sendMessage(event) function to send the typed message to the server.
- WebSocket("ws://127.0.0.1:8080/chat"):在連接埠 8080 上建立到伺服器 127.0.0.1 的新 WebSocket 連接,特別是 /chat 端點。
- 變數echo_service保存WebSocket實例,方便與伺服器通訊。
- onopen(連線建立)
- 成功建立與伺服器的連線時會觸發onopen函數。
- 它會在日誌中附加一條訊息:「?已連接到 WebSocket!」。
- onmessage(收到訊息)
The JavaScript logic
Initializing the WebSocket connection
window.onload = function () { echo_service = new WebSocket("ws://127.0.0.1:8080/chat"); ... };
處理 WebSocket 事件
WebSocket 用戶端有四個主要事件處理程序:
if (url.pathname === "/") return new Response(Bun.file("./index.html"));
<!doctype html> <html> <head> <title>WebSocket with Bun and JavaScript</title> <script> let echo_service; append = function (text) { document .getElementById("websocket_events") .insertAdjacentHTML("beforeend", "<li>" + text + ";</li>"); }; window.onload = function () { echo_service = new WebSocket("ws://127.0.0.1:8080/chat"); echo_service.onmessage = function (event) { append(event.data); }; echo_service.onopen = function () { append("? Connected to WebSocket!"); }; echo_service.onclose = function () { append("Connection closed"); }; echo_service.onerror = function () { append("Error happens"); }; }; function sendMessage(event) { console.log(event); let message = document.getElementById("message").value; echo_service.send(message); } </script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css" /> </head> <body> <main> <h2> Explaining the client code </h2> <p>This code creates a simple <strong>WebSocket client</strong> in a browser to interact with a WebSocket server. Here's a detailed explanation of its components:</p> <hr> <h3> The HTML structure </h3> <pre class="brush:php;toolbar:false"><!doctype html> <html> <head> <title>WebSocket with Bun and JavaScript</title> </head> <body> <main> <ul> <li>The input field (<input> <li>The submit button (<input type="button">): when clicked, it triggers the sendMessage(event) function to send the typed message to the server.
- 每當從伺服器收到訊息時就會觸發 onmessage 函數。
- 使用append函數將伺服器的訊息(event.data)附加到事件日誌中。
- onclose(連線關閉)
- onclose 函數會在與伺服器的連線關閉(例如伺服器中斷連線)時觸發。
- 此函數將「連線關閉」附加到事件日誌中。
- onerror(發生錯誤)
- 通訊發生錯誤時會觸發onerror函數。
- 函數會記錄「發生錯誤」以指示問題。
- 點擊「提交」按鈕時呼叫 sendMessage 函數。
- document.getElementById("message").value:擷取使用者在輸入框中輸入的文字。
- echo_service.send(message):它將使用者的訊息傳送到WebSocket伺服器。
-
此實用函數將 WebSocket 事件和訊息加入
- 中。列表 (id="websocket_events")。
insertAdjacentHTML("beforeend", "
- " text "; "):將給定文字作為新列表項目(
- ) 插入到列表末尾.
- 頁面載入時,瀏覽器與伺服器建立 WebSocket 連線。
- 連線成功後,會記錄一則訊息:「?已連線至 WebSocket!」。
- 使用者可以在輸入框中輸入訊息,然後按一下「提交」按鈕。訊息被傳送到 WebSocket 伺服器。
The JavaScript logic
Initializing the WebSocket connection
window.onload = function () { echo_service = new WebSocket("ws://127.0.0.1:8080/chat"); ... };
echo_service.onopen = function () { append("? Connected to WebSocket!"); };
echo_service.onmessage = function (event) { append(event.data); };
向伺服器發送訊息
echo_service.onclose = function () { append("Connection closed"); };
記錄事件
echo_service.onerror = function () { append("Error happens"); };
使用 PicoCSS 進行樣式設定
function sendMessage(event) { let message = document.getElementById("message").value; echo_service.send(message); }
PicoCSS 為頁面提供了輕量級且優雅的樣式,確保表單和活動日誌看起來優美,無需額外的自訂 CSS。
回顧,它是如何運作的
下一步
本文探討如何實作 WebSocket 用戶端與 WebSocket 伺服器通訊。在本系列的上一篇文章中,我們重點介紹了建立基本的 WebSocket 伺服器。
在下一篇文章中,我們將透過實作廣播邏輯來進一步探索 WebSocket 功能。此功能允許將來自一個客戶端的消息轉發到所有連接的客戶端,這對於建立聊天系統、協作工具或即時通知等即時應用程式至關重要。
敬請期待!
以上是使用 JavaScript 的 WebSocket 用戶端的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

實現視差滾動和元素動畫效果的探討本文將探討如何實現類似資生堂官網(https://www.shiseido.co.jp/sb/wonderland/)中�...

學習JavaScript不難,但有挑戰。 1)理解基礎概念如變量、數據類型、函數等。 2)掌握異步編程,通過事件循環實現。 3)使用DOM操作和Promise處理異步請求。 4)避免常見錯誤,使用調試技巧。 5)優化性能,遵循最佳實踐。

探索前端中類似VSCode的面板拖拽調整功能的實現在前端開發中,如何實現類似於VSCode...

深入探討console.log輸出差異的根源本文將分析一段代碼中console.log函數輸出結果的差異,並解釋其背後的原因。 �...
