分類
網頁製作/軟體開發知識

如何在 Vue.js 中使用 Websockets

在現代網站開發中,實時通訊變得愈加重要。無論是即時聊天、協同編輯,還是線上遊戲,都需要高效且可靠的通訊機制。WebSocket 協定提供了客戶端與伺服器之間的持久性全雙工連線,滿足了這些需求。本文將介紹如何在 Vue 3 專案中整合 WebSocket,並提供一個簡單的聊天室範例。

在現代網站開發中,實時通訊變得愈加重要。無論是即時聊天、協同編輯,還是線上遊戲,都需要高效且可靠的通訊機制。WebSocket 協定提供了客戶端與伺服器之間的持久性全雙工連線,滿足了這些需求。本文將介紹如何在 Vue 3 專案中整合 WebSocket,並提供一個簡單的聊天室範例。

前置準備

首先,確保您的開發環境已安裝 Node.js(建議版本 18.0 或以上)。您可以從 Node.js 官方網站下載並安裝最新版本。

建立 Vue 3 專案

使用 Vite 建立新的 Vue 3 專案:

# 建立新專案
npm create vue@latest

# 進入專案目錄
cd my-websocket-app

在執行 npm create vue@latest 時,系統會提示您選擇專案名稱和所需的功能,例如是否使用 TypeScript、是否添加 Vue Router 等。根據您的需求進行選擇即可。

安裝套件

在專案目錄中,安裝必要的套件:

# 安裝專案相依套件
npm install

# 安裝 Socket.io 客戶端
npm install socket.io-client

實作 WebSocket 客戶端

src/App.vue 中,添加以下程式碼:

<template>
  <div>
    <ul>
      <li v-for="(msg, index) in messages" :key="index">{{ msg }}</li>
    </ul>
    <input v-model="newMessage" @keyup.enter="sendMessage" placeholder="輸入訊息並按 Enter 發送" />
  </div>
</template>

<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue';
import { io } from 'socket.io-client';

const messages = ref([]);
const newMessage = ref('');
const socket = io('http://localhost:3000');

const sendMessage = () => {
  if (newMessage.value.trim()) {
    socket.emit('message', newMessage.value);
    newMessage.value = '';
  }
};

onMounted(() => {
  socket.on('message', (message) => {
    messages.value.push(message);
  });
});

onBeforeUnmount(() => {
  socket.disconnect();
});
</script>

<style>
/* 您可以在此添加樣式 */
</style>

程式碼解釋

導入必要模組refonMountedonBeforeUnmount 來自 Vue 3 的 Composition API,io 則來自 socket.io-client

定義響應式變數

  • messages:儲存接收到的訊息列表。
  • newMessage:綁定使用者輸入的新訊息。

建立 Socket 連線:使用 io('http://localhost:3000') 與伺服器建立連線。

定義 sendMessage 方法:當使用者按下 Enter 鍵時,檢查 newMessage 是否非空,然後透過 socket.emit('message', newMessage.value) 發送訊息,並清空輸入框。

設定生命週期鉤子

  • onMounted:組件掛載後,監聽來自伺服器的 ‘message’ 事件,並將接收到的訊息添加到 messages
  • onBeforeUnmount:組件卸載前,斷開 Socket 連線。

建立後端 WebSocket 伺服器

為了與前端進行通訊,需要建立一個 WebSocket 伺服器。以下是使用 Node.js 和 Socket.io 建立的簡單伺服器範例:

const express = require('express');
const http = require('http');
const { Server } = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = new Server(server);

io.on('connection', (socket) => {
  console.log('使用者已連線');

  socket.on('message', (message) => {
    io.emit('message', message);
  });

  socket.on('disconnect', () => {
    console.log('使用者已斷開連線');
  });
});

server.listen(3000, () => {
  console.log('伺服器正在 http://localhost:3000 上運行');
});

程式碼解釋

導入模組express 用於建立 HTTP 伺服器,httpsocket.io 用於 WebSocket 通訊。

建立伺服器:使用 express 建立應用,並透過 http.createServernew Server 建立 Socket.io 伺服器。

設定連線事件:當有使用者連線時,監聽 ‘message’ 事件,並將接收到的訊息廣播給所有連線的客戶端。

啟動伺服器:伺服器監聽 3000 埠,並在控制台輸出運行訊息。

透過上述步驟,您已成功在 Vue 3 專案中整合 WebSocket,並建立了一個簡單的聊天室應用。這種實時通訊的實作方式可應用於各種需要即時資料更新的場景,如即時聊天、協同編輯等。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *