基本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」。

網頁介面雛形:

vocus|新世代的創作平台

※ 連接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 的 方法,將使用者輸入的文字內容發送到伺服器。

發送訊息成果

vocus|新世代的創作平台


監聽連線成功事件

socket.onopen = function (e) {
alert('onopen')
}
vocus|新世代的創作平台

畫面上顯示成功連線提示

socket.onopen = function (e) {
    //畫面上顯示提示
    appendHistory('Connected')
  }
vocus|新世代的創作平台

Websocket收到訊息

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

Websocket收到訊息畫面提示

socket.onmessage = function (e) {
    console.log(e)
    appendHistory(e.data)
  }
vocus|新世代的創作平台


監聽連線關閉事件

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

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

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

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

vocus|新世代的創作平台












留言
avatar-img
奧莉薇走在成為後端工程師之路上
28會員
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
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
我們在 【Python 軍火庫🧨 - websockets】傳送/接收音檔並轉換成numpy(基礎篇) 有聊到要如何透過Websocket來傳送音檔,但上一篇的作法是在Client端就進行音訊的解碼動作,這樣會有一個缺點,假設Client的機器運算效能較差,那麼運算的結果勢必會較慢出現,對於使用者
Thumbnail
我們在 【Python 軍火庫🧨 - websockets】傳送/接收音檔並轉換成numpy(基礎篇) 有聊到要如何透過Websocket來傳送音檔,但上一篇的作法是在Client端就進行音訊的解碼動作,這樣會有一個缺點,假設Client的機器運算效能較差,那麼運算的結果勢必會較慢出現,對於使用者
Thumbnail
在 IG 上看到一位前端大大用 Google Apps Script + Line bot 替自己的球隊安排了球經,覺得很有趣,想來玩看看
Thumbnail
在 IG 上看到一位前端大大用 Google Apps Script + Line bot 替自己的球隊安排了球經,覺得很有趣,想來玩看看
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
前段時間我們有介紹「【Python 軍火庫🧨 - websockets】雙向溝通的渠道」, 這種方式可以達到基本的連線沒問題,但隨著資安意識的抬頭, 我們的websocket連線也會需要在通道之上進行加密, 那麼我們將根據使用情境來教您如何選用適當的連線。 Server端 我們的Serve
Thumbnail
在AI浪潮下,009819 中信美國數據中心及電力ETF 直接卡位算力與電力雙主軸,等於掌握AI最核心基建。2008從 Apple Inc. 與 iPhone 帶動供應鏈,到如今AI崛起,主線已由應用端轉向底層。AI發展離不開算力與電力支撐,009819的價值,在於押中「沒有它不行」的核心資產。
Thumbnail
在AI浪潮下,009819 中信美國數據中心及電力ETF 直接卡位算力與電力雙主軸,等於掌握AI最核心基建。2008從 Apple Inc. 與 iPhone 帶動供應鏈,到如今AI崛起,主線已由應用端轉向底層。AI發展離不開算力與電力支撐,009819的價值,在於押中「沒有它不行」的核心資產。
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
關於Websockets的篇章, 有興趣的朋友歡迎參考: 【Python 軍火庫 - websockets】雙向溝通的渠道 【Python 軍火庫 - websockets】用json來溝通吧! 而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
Thumbnail
關於Websockets的篇章, 有興趣的朋友歡迎參考: 【Python 軍火庫 - websockets】雙向溝通的渠道 【Python 軍火庫 - websockets】用json來溝通吧! 而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News