ExpressWebSocket是基於Node.js的WebSocket服務器,它使用了Express框架,並可以操作WebSocket。本文將從多個方面詳細闡述ExpressWebSocket。
一、使用ExpressWebSocket進行簡單通信
要使用ExpressWebSocket進行簡單的通信,您需要先安裝依賴項。請使用以下命令進行安裝:
npm install express express-ws
接下來,您需要在您的Express應用程序中初始化WebSocket服務器。下面是一個示例代碼,其中wss為WebSocket服務器:
const express = require('express');
const expressWs = require('express-ws');
const app = express();
expressWs(app);
const PORT = 3000;
app.ws('/', (ws, req) => {
console.log('WebSocket connected');
ws.on('message', msg => {
console.log(`Received message: ${msg}`);
ws.send(`You said: ${msg}`);
});
});
app.listen(PORT, () => console.log(`WebSocket server started on port ${PORT}`));
上述代碼中定義了一個WebSocket路由’/’. 當客戶端連接到WebSocket服務器時,它將在控制台輸出’WebSocket connected’,並在收到消息時回復客戶端消息。我們在客戶端使用如下代碼,用於進行WebSocket通信:
const socket = new WebSocket('ws://localhost:3000/');
socket.addEventListener('open', event => {
socket.send('Hello from client!');
});
socket.addEventListener('message', event => {
console.log(`Received message: ${event.data}`);
});
以上代碼用於在客戶端建立WebSocket連接並發送消息。當服務器收到這個消息後,它將會回復’You said: Hello from client!’,在客戶端控制台輸出該信息。
二、使用ExpressWebSocket進行廣播
要使用ExpressWebSocket進行廣播,您需要創建一個連接列表並在每個連接上進行迭代。下面是一個示例代碼,其中本質上是把所有的WebSocket連接都保存在了一個數組中:
const express = require('express');
const expressWs = require('express-ws');
const app = express();
expressWs(app);
const PORT = 3000;
const connections = new Set();
app.ws('/', (ws, req) => {
console.log('WebSocket connected');
connections.add(ws);
ws.on('close', () => {
connections.delete(ws);
});
ws.on('message', msg => {
console.log(`Received message: ${msg}`);
for (let conn of connections) {
conn.send(msg);
}
});
});
app.listen(PORT, () => console.log(`WebSocket server started on port ${PORT}`));
在上述代碼中,我們創建了一個空的Set,用於保存WebSocket連接。當客戶端連接到WebSocket服務器時,我們將其添加到Set中,當客戶端關閉連接時,我們從Set中刪除該連接。在每個WebSocket連接上,我們迭代所有連接並將傳入的消息發送到每個連接。
三、使用ExpressWebSocket進行多房間通信
要使用ExpressWebSocket進行多房間通信,您需要先確定什麼時候應該切換到另一個房間並將每個WebSocket連接分配給相應的房間。以下是一個示例代碼,其中本質上是基於廣播做了改進。
const express = require('express');
const expressWs = require('express-ws');
const app = express();
expressWs(app);
const PORT = 3000;
const connections = new Map();
function joinRoom(ws, roomId) {
if (!connections.has(roomId)) {
connections.set(roomId, new Set());
}
connections.get(roomId).add(ws);
}
function leaveRoom(ws, roomId) {
if (connections.has(roomId)) {
connections.get(roomId).delete(ws);
}
}
function broadcastRoom(roomId, ...args) {
if (connections.has(roomId)) {
for (let conn of connections.get(roomId)) {
conn.send(...args);
}
}
}
app.ws('/rooms/:roomId', (ws, req) => {
console.log('WebSocket connected');
const roomId = req.params.roomId;
joinRoom(ws, roomId);
ws.on('close', () => {
leaveRoom(ws, roomId);
});
ws.on('message', msg => {
console.log(`Received message: ${msg}`);
broadcastRoom(roomId, msg);
});
});
app.listen(PORT, () => console.log(`WebSocket server started on port ${PORT}`));
在上述代碼中,我們定義了三個功能函數,分別為加入房間、離開房間和廣播給指定房間。在WebSocket路由’/rooms/:roomId’中,我們從url的參數中獲取roomId,並將WebSocket連接加入房間。當客戶端斷開連接時,我們從指定房間中刪除該連接。在每個WebSocket連接上,我們將傳入的消息廣播到相應的房間。要將消息廣播到特定房間,請使用broadcastRoom函數,傳入roomId和您要廣播的消息。
四、結語
本文從簡單通信、廣播和多房間通信三個方面詳細闡釋使用ExpressWebSocket進行通信的各個環節。在使用ExpressWebSocket開發WebSocket應用程序時,請牢記本文提供的示例代碼,可以讓您更好地了解ExpressWebSocket的操作流程。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/206156.html
微信掃一掃
支付寶掃一掃