天天看點

「網絡攻防」一個案例帶你了解Node.js+ws子產品如何實作websocket

作者:信安傳遞

1、前言

大家好,我是紙飛機。倘若每天都是無盡的知識點,那這樣的學習想必會很枯燥無味吧。今天就給大家帶來個比較有成就感的玩意:Node.js+ws子產品來制作一個簡易聊天室!文末有代碼位址。

「網絡攻防」一個案例帶你了解Node.js+ws子產品如何實作websocket

效果圖

看了效果,好奇實作方式嗎? 接下來就為您一一講解:

2、項目結構分析

「網絡攻防」一個案例帶你了解Node.js+ws子產品如何實作websocket

項目目錄拆解:

client檔案夾:用戶端配置

server.js:給用戶端的靜态伺服器

WebSocketServer.js:服務端配置檔案

整體結構有了,接下來,嘿嘿。

「網絡攻防」一個案例帶你了解Node.js+ws子產品如何實作websocket

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.js+ws子產品如何實作websocket

node server.js

「網絡攻防」一個案例帶你了解Node.js+ws子產品如何實作websocket

以上就代表啟動成功。 接下來我們本地測試下,想線上玩的同學也可以自行上傳玩玩。

4、檢視效果

用倆浏覽器打開localhost:3000即可檢視效果:

「網絡攻防」一個案例帶你了解Node.js+ws子產品如何實作websocket

代碼下載下傳位址:https://codechina.csdn.net/qq_32442973/websocket.git

小提問:websocket斷開該怎麼辦呢(心跳)?(後面會出文章)

「網絡攻防」一個案例帶你了解Node.js+ws子產品如何實作websocket
「網絡攻防」一個案例帶你了解Node.js+ws子產品如何實作websocket
「網絡攻防」一個案例帶你了解Node.js+ws子產品如何實作websocket

————————————————

版權聲明:本文為CSDN部落客「前端紙飛機」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/qq_32442973/article/details/120249959

繼續閱讀