1、前言
大家好,我是紙飛機。倘若每天都是無盡的知識點,那這樣的學習想必會很枯燥無味吧。今天就給大家帶來個比較有成就感的玩意:Node.js+ws子產品來制作一個簡易聊天室!文末有代碼位址。
效果圖
看了效果,好奇實作方式嗎? 接下來就為您一一講解:
2、項目結構分析
項目目錄拆解:
client檔案夾:用戶端配置
server.js:給用戶端的靜态伺服器
WebSocketServer.js:服務端配置檔案
整體結構有了,接下來,嘿嘿。
3、操作步驟
準備:
package.json需要執行以下指令才能得到:
npm init -y
需要兩個依賴包:
npm install ws --save-dev
npm install express --save-dev
步驟1:服務端建構(WebSocketServer.js)
const webSocket = require("ws"); //引入ws伺服器子產品
const ws = new webSocket.Server({ port: 8000 }); //建立伺服器,端口為8000
let clients = {};
let clientNum = 0;
ws.on("connection", (client) => {
//連接配接用戶端
//給用戶端編号,也就是參與聊天的使用者
client.name = ++clientNum;
clients[client.name] = client;
// 使用者的聊天資訊
client.on("message", (msg) => {
console.log("使用者" + client.name + "說:" + msg);
//廣播資料發送輸出
broadcast(client, msg);
});
//報錯資訊
client.on("error", (err) => {
if (err) {
console.log(err);
}
});
// 下線
client.on("close", () => {
delete clients[client.name];
console.log("使用者" + client.name + "下線了~~");
});
});
//廣播方法
function broadcast(client, msg) {
for (var key in clients) {
clients[key].send("使用者" + client.name + "說:" + msg);
}
}
步驟2:用戶端靜态伺服器建構(server.js)
const express = require("express"); //引入express子產品
const path = require("path"); //引入磁盤路徑子產品
const app = express();
const port = 3000; //端口
const host = "127.0.0.1"; //主機
app.use(express.static(path.resolve(__dirname, "./client"))); //設定要開啟服務的路徑
app.listen(port, host, () => {
//監聽服務
console.log(`用戶端伺服器為:http://${host}:${port}`);
});
步驟3:用戶端頁面建構(index.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>用戶端</title>
</head>
<body>
<h1>聊天室</h1>
<div id="content" name="name" style="overflow-y: scroll; width: 400px; height: 300px; border: solid 1px #000"></div>
<br />
<div>
<input type="text" id="msg" style="width: 200px;">
</div>
<button id="submit">送出</button>
<script src="WSClient.js" charset="utf-8"></script>
<script>
document.querySelector('#submit').addEventListener('click', function () {
var msg2 = msg.value
ws.send(msg2)
msg.value = ''
}, false)
</script>
</body>
</html>
步驟4:用戶端連接配接到服務端配置(WSClient.js)
const ws = new WebSocket("ws://127.0.0.1:8000"); //連接配接到用戶端
//上線
ws.onopen = () => {
ws.send("我上線啦");
};
//發送資訊
ws.onmessage = (msg) => {
const content = document.getElementById("content");
content.innerHTML += msg.data + "<br>";
};
//報錯
ws.onerror = (err) => {
console.log(err);
};
//下線
ws.onclose = () => {
console.log("close");
};
到這裡就已經完成。
步驟5:分别啟動 WebSocketServer.js ,server.js
node WebSocketServer.js
node server.js
以上就代表啟動成功。 接下來我們本地測試下,想線上玩的同學也可以自行上傳玩玩。
4、檢視效果
用倆浏覽器打開localhost:3000即可檢視效果:
代碼下載下傳位址:https://codechina.csdn.net/qq_32442973/websocket.git
小提問:websocket斷開該怎麼辦呢(心跳)?(後面會出文章)
————————————————
版權聲明:本文為CSDN部落客「前端紙飛機」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/qq_32442973/article/details/120249959