時間:2023-07-22 07:30:02 | 來源:網(wǎng)站運營
時間:2023-07-22 07:30:02 來源:網(wǎng)站運營
WebSocket 入門:簡易聊天室:大家好,我是前端西瓜哥,今天我們用 WebSocket 來實現(xiàn)一個簡單的聊天室。yarn add ws
類似 nodejs 原生的 http 等模塊,ws 庫支持 WebSocket 的服務(wù)端或客戶端, 提供偏底層的 API。import { WebSocketServer } from "ws";// 創(chuàng)建一個 ws 服務(wù)const wsSever = new WebSocketServer({ port: 6060,});// 每當(dāng)一個客戶端進行了 ws 連接,就會創(chuàng)建一個 ws 對象wsSever.on("connection", (ws) => { // 新客戶端連接時,廣播 wsSever.clients.forEach((client) => { client.send(`有人進入聊天室,當(dāng)前聊天室人數(shù):${wsSever.clients.size}`); }); // 廣播任何客戶端發(fā)送的消息 ws.on("message", (data) => { const msg = data.toString(); wsSever.clients.forEach((client) => { client.send(msg); }); }); // 當(dāng)有客戶端退出時,廣播 ws.on("close", () => { wsSever.clients.forEach((client) => { client.send(`有人退出了聊天室,當(dāng)前聊天室人數(shù):${wsSever.clients.size}`); }); });});
每當(dāng)一個客戶端進行了 websocket 連接,都會觸發(fā) wsServer 的 connection
事件,然后拿到一個 ws 對象。const ws = new WebSocket('ws://localhost:6060');ws.addEventListener('message', (event) => { const div = document.createElement('div'); div.innerText = event.data; document.body.append(div);})// 點擊發(fā)送按鈕,將輸入框中的內(nèi)容發(fā)送給服務(wù)器const input = document.querySelector('input');const btn = document.querySelector('button');btn.onclick = () => { ws.send(input.value); input.value = '';}
import { Server } from "socket.io";// socket.io v3.x 開始默認不允許跨域,需要在配置顯式設(shè)置為允許跨域const io = new Server(6060, { cors: { origin: "*" } });io.on("connection", (socket) => { // 新客戶端連接時,廣播 io.emit("chat", `有人進入聊天室,當(dāng)前聊天室人數(shù):${io.engine.clientsCount}`); // 廣播任何客戶端發(fā)送的消息 socket.on("chat", (data) => { io.emit("chat", data); }); // 當(dāng)有客戶端退出時,廣播 socket.on("disconnect", () => { io.emit("chat", `有人退出了聊天室,當(dāng)前聊天室人數(shù):${io.engine.clientsCount}`); });});
需要特別注意的是,http://Socket.IO 的 v3.x 版本開始,默認不允許跨域,需要在配置顯式設(shè)置為允許跨域。const socket = io('ws://localhost:6060');socket.on('chat', (data) => { const div = document.createElement('div'); div.innerText = data; document.body.append(div);})// 點擊發(fā)送按鈕,將輸入框中的內(nèi)容發(fā)送給服務(wù)器const input = document.querySelector('input');const btn = document.querySelector('button');btn.onclick = () => { console.log('發(fā)送'); socket.emit('chat', input.value); input.value = '';}
http://Socket.IO 優(yōu)點是實現(xiàn)了生產(chǎn)環(huán)境需要的底層非業(yè)務(wù)能力,讓我們能更心無旁騖地去編寫業(yè)務(wù)代碼。關(guān)鍵詞:簡易,入門
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。