基本WebSocket聊天室前端示範

更新 發佈閱讀 7 分鐘

※ 建立靜態的網頁腳本:

<!DOCTYPE html>
<html>
<head>
  <title>WebSocket minimal demo</title>
</head>
<body>
  <!-- 聊天室紀錄 -->
  <ul class="chat-list"></ul>
  <!-- 輸入文字 -->
  <input class="input">
<!-- 發送按鈕 -->
  <button onclick="send()">Send</button>
</body>
<!-- 實作範圍 -->
<script>
//發送文字功能
  function send() {
    alert('send') }

</script>
</html>

程式碼解說:

HTML 部分

1. <ul class="chat-list"></ul>:

  • 用來顯示聊天室的訊息紀錄。
  • class="chat-list"定義了一個類別,可以用於套用 CSS 樣式或在 JavaScript 中進行操作。

2. <input class="input">:

  • 提供一個文字輸入欄位。
  • class="input"定義類別,可以用來調整樣式或進行功能擴展。

3. <button onclick="send()">Send</button>:

  • 定義了一個按鈕,標籤上顯示「Send」。
  • 當按鈕被按下時,會執行 JavaScript 中名為send() 的函數。

JavaScript 部分:

1. function send() {alert('send') }:

  • 這是一個函數,名稱為send 。
  • 當使用者按下按鈕時,這個函數會被觸發。
  • alert('send'):顯示一個彈出訊息框,內容為「send」。

網頁介面雛形:

raw-image

※ 連接server功能:

建立連線:

 let socket = new WebSocket('ws://localhost:8080')

程式碼解說:

  • WebSocket: WebSocket 是一種通信協議,能夠在瀏覽器與伺服器之間建立持續的雙向連接。例如聊天室、即時遊戲等。
  • new Websocket:Websocket是瀏覽器原生提供的建構函數,用於創建 WebSocket 連接。
  • 連線的 URL:ws://localhost:8080是 WebSocket 伺服器的地址。

※ 定義不同事件的對應方式:

新增一筆「歷史紀錄」

 function appendHistory(message) {
    let c = document.createElement('li')
    c.innerText = message
    document.getElementsByClassName('chat-list')[0].appendChild(c)
  }

程式碼解說:

1. 函數名稱與用途:

  • 函數名稱appendHistory : 表示向聊天歷史(History)中新增一筆訊息。
  • 傳入參數message : 指使用者的訊息內容,將被用來顯示在聊天室。

2. 步驟拆解:

(1)建立新的li 元素:

  • 變數c : 用來存放新建立的li 元素。
  • document.createElement('li'): 使用createElement 方法建立一個新的 HTML 元素,這裡是列表項 。

(2)設置文字內容:

  • c.innerText: 用來設定 元素的內部文字內容(即使用者的訊息)。
  • message: 函數傳入的參數,表示使用者要新增的訊息。

(3)將新的li 元素附加到聊天紀錄列表:

document.getElementsByClassName('chat-list')[0]:

  • 使用getElementsByClassName 方法取得 HTML 中的chat-list 類別元素。
  • [0]表示取得第一個符合 類別的元素(通常為 <ul class="chat-list"></ul> )。

appendChild(c): 將新的li 元素(存放在c 中)加入到chat-list 內。

發送訊息

function send() {
    const value = document.getElementsByClassName("input")[0].value
    socket.send(value)
  }

程式碼解說:

1. 函數名稱與用途:

  • 函數名稱send : 表示執行「訊息發送」的功能。
  • 當被呼叫時,此函數會從輸入框中取得使用者的輸入文字,並透過 WebSocket 發送到伺服器。

2. 取得輸入框的內容:

(1)document.getElementsByClassName("input"):

  • 根據類別名input ,獲取 HTML 中所有具有class="input" 的元素。
  • [0]表示取得第一個匹配的元素(通常是文字輸入框)。

(2).value:

  • 取得該輸入框的值(即使用者輸入的內容)。

(3)const value:

  • 儲存輸入框中的文字內容到常數 。

3. 透過 WebSocket 發送訊息:

socket: 一個已建立的 WebSocket 連線。

.send(value):使用 WebSocket 的 方法,將使用者輸入的文字內容發送到伺服器。

發送訊息成果

raw-image


監聽連線成功事件

socket.onopen = function (e) {
alert('onopen')
}
raw-image

畫面上顯示成功連線提示

socket.onopen = function (e) {
    //畫面上顯示提示
    appendHistory('Connected')
  }
raw-image

Websocket收到訊息

socket.onmessage = function (e) {
alert('onmessage')
  }

Websocket收到訊息畫面提示

socket.onmessage = function (e) {
    console.log(e)
    appendHistory(e.data)
  }
raw-image


監聽連線關閉事件

socket.onclose = function (e) {
alert('onclose')
  }

監聽連線關閉事件畫面提示

socket.onclose = function (e) {
    appendHistory('Connection closed')
  }

※ Websocket也可以利用開發者工具檢查和測試網站或網頁應用程式:

raw-image












留言
avatar-img
奧莉薇走在成為後端工程師之路上
26會員
171內容數
全端網頁開發專業知識分享
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
市場經驗拉長之後,很多投資人都會遇到同一個問題:不是方向看錯,而是部位太集中個股,常常跟大趨勢脫節。 早年的台股環境,中小股非常吃香,反而權值股不動,但QE量化寬鬆後,特別是疫情之後,後疫情時代,鈔票大量在股市走動,這些大資金只能往權值股走,因此早年小P的策略偏向中小型個股,但近年AI興起,高技術
Thumbnail
市場經驗拉長之後,很多投資人都會遇到同一個問題:不是方向看錯,而是部位太集中個股,常常跟大趨勢脫節。 早年的台股環境,中小股非常吃香,反而權值股不動,但QE量化寬鬆後,特別是疫情之後,後疫情時代,鈔票大量在股市走動,這些大資金只能往權值股走,因此早年小P的策略偏向中小型個股,但近年AI興起,高技術
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
在 IG 上看到一位前端大大用 Google Apps Script + Line bot 替自己的球隊安排了球經,覺得很有趣,想來玩看看
Thumbnail
在 IG 上看到一位前端大大用 Google Apps Script + Line bot 替自己的球隊安排了球經,覺得很有趣,想來玩看看
Thumbnail
我們在 【Python 軍火庫🧨 - websockets】傳送/接收音檔並轉換成numpy(基礎篇) 有聊到要如何透過Websocket來傳送音檔,但上一篇的作法是在Client端就進行音訊的解碼動作,這樣會有一個缺點,假設Client的機器運算效能較差,那麼運算的結果勢必會較慢出現,對於使用者
Thumbnail
我們在 【Python 軍火庫🧨 - websockets】傳送/接收音檔並轉換成numpy(基礎篇) 有聊到要如何透過Websocket來傳送音檔,但上一篇的作法是在Client端就進行音訊的解碼動作,這樣會有一個缺點,假設Client的機器運算效能較差,那麼運算的結果勢必會較慢出現,對於使用者
Thumbnail
關於Websockets的篇章, 有興趣的朋友歡迎參考: 【Python 軍火庫 - websockets】雙向溝通的渠道 【Python 軍火庫 - websockets】用json來溝通吧! 而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
Thumbnail
關於Websockets的篇章, 有興趣的朋友歡迎參考: 【Python 軍火庫 - websockets】雙向溝通的渠道 【Python 軍火庫 - websockets】用json來溝通吧! 而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
Thumbnail
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。
Thumbnail
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News