首頁 web前端 js教程 使用 JavaScript 的 WebSocket 用戶端

使用 JavaScript 的 WebSocket 用戶端

Dec 03, 2024 am 12:33 AM

WebSocket Client with JavaScript

在本系列的上一篇文章「使用 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.
登入後複製
  • The messages/events log (

      The JavaScript logic

      Initializing the WebSocket connection

      window.onload = function () {
          echo_service = new WebSocket("ws://127.0.0.1:8080/chat");
          ...
      };
      
      登入後複製
      登入後複製
      • WebSocket("ws://127.0.0.1:8080/chat"):在連接埠 8080 上建立到伺服器 127.0.0.1 的新 WebSocket 連接,特別是 /chat 端點。
      • 變數echo_service保存WebSocket實例,方便與伺服器通訊。

      處理 WebSocket 事件

      WebSocket 用戶端有四個主要事件處理程序:

      1. onopen(連線建立)
        if (url.pathname === "/") 
          return new Response(Bun.file("./index.html"));
      
      登入後複製
      登入後複製
      • 成功建立與伺服器的連線時會觸發onopen函數。
      • 它會在日誌中附加一條訊息:「?已連接到 WebSocket!」。
      1. onmessage(收到訊息)
      <!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.
      登入後複製
    • The messages/events log (

        The JavaScript logic

        Initializing the WebSocket connection

        window.onload = function () {
            echo_service = new WebSocket("ws://127.0.0.1:8080/chat");
            ...
        };
        
        登入後複製
        登入後複製
        • 每當從伺服器收到訊息時就會觸發 onmessage 函數。
        • 使用append函數將伺服器的訊息(event.data)附加到事件日誌中。
        1. onclose(連線關閉)
           echo_service.onopen = function () {
               append("? Connected to WebSocket!");
           };
        
        登入後複製
        • onclose 函數會在與伺服器的連線關閉(例如伺服器中斷連線)時觸發。
        • 此函數將「連線關閉」附加到事件日誌中。
        1. onerror(發生錯誤)
           echo_service.onmessage = function (event) {
               append(event.data);
           };
        
        登入後複製
        • 通訊發生錯誤時會觸發onerror函數。
        • 函數會記錄「發生錯誤」以指示問題。

        向伺服器發送訊息

           echo_service.onclose = function () {
               append("Connection closed");
           };
        
        登入後複製
        • 點擊「提交」按鈕時呼叫 sendMessage 函數。
        • document.getElementById("message").value:擷取使用者在輸入框中輸入的文字。
        • echo_service.send(message):它將使用者的訊息傳送到WebSocket伺服器。

        記錄事件

           echo_service.onerror = function () {
               append("Error happens");
           };
        
        登入後複製
        • 此實用函數將 WebSocket 事件和訊息加入

            中。列表 (id="websocket_events")。
        • insertAdjacentHTML("beforeend", "

        • " text ";
        • "):將給定文字作為新列表項目(
        • ) 插入到列表末尾.

        使用 PicoCSS 進行樣式設定

        function sendMessage(event) {
            let message = document.getElementById("message").value;
            echo_service.send(message);
        }
        
        登入後複製

        PicoCSS 為頁面提供了輕量級且優雅的樣式,確保表單和活動日誌看起來優美,無需額外的自訂 CSS。


        回顧,它是如何運作的

        1. 頁面載入時,瀏覽器與伺服器建立 WebSocket 連線。
        2. 連線成功後,會記錄一則訊息:「?已連線至 WebSocket!」。
        3. 使用者可以在輸入框中輸入訊息,然後按一下「提交」按鈕。訊息被傳送到 WebSocket 伺服器。

        下一步

        本文探討如何實作 WebSocket 用戶端與 WebSocket 伺服器通訊。在本系列的上一篇文章中,我們重點介紹了建立基本的 WebSocket 伺服器。

        在下一篇文章中,我們將透過實作廣播邏輯來進一步探索 WebSocket 功能。此功能允許將來自一個客戶端的消息轉發到所有連接的客戶端,這對於建立聊天系統、協作工具或即時通知等即時應用程式至關重要。

        敬請期待!

        以上是使用 JavaScript 的 WebSocket 用戶端的詳細內容。更多資訊請關注PHP中文網其他相關文章!

  • 本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

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

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

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

    前端熱敏紙小票打印遇到亂碼問題怎麼辦? 前端熱敏紙小票打印遇到亂碼問題怎麼辦? Apr 04, 2025 pm 02:42 PM

    前端熱敏紙小票打印的常見問題與解決方案在前端開發中,小票打印是一個常見的需求。然而,很多開發者在實...

    誰得到更多的Python或JavaScript? 誰得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

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

    神秘的JavaScript:它的作用以及為什麼重要 神秘的JavaScript:它的作用以及為什麼重要 Apr 09, 2025 am 12:07 AM

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

    如何使用JavaScript將具有相同ID的數組元素合併到一個對像中? 如何使用JavaScript將具有相同ID的數組元素合併到一個對像中? Apr 04, 2025 pm 05:09 PM

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

    如何實現視差滾動和元素動畫效果,像資生堂官網那樣?
或者:
怎樣才能像資生堂官網一樣,實現頁面滾動伴隨的動畫效果? 如何實現視差滾動和元素動畫效果,像資生堂官網那樣? 或者: 怎樣才能像資生堂官網一樣,實現頁面滾動伴隨的動畫效果? Apr 04, 2025 pm 05:36 PM

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

    JavaScript難以學習嗎? JavaScript難以學習嗎? Apr 03, 2025 am 12:20 AM

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

    前端開發中如何實現類似 VSCode 的面板拖拽調整功能? 前端開發中如何實現類似 VSCode 的面板拖拽調整功能? Apr 04, 2025 pm 02:06 PM

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

    console.log輸出結果差異:兩次調用為何不同? console.log輸出結果差異:兩次調用為何不同? Apr 04, 2025 pm 05:12 PM

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

    See all articles