node.js-node.js作為服務器,前端使用WebSocket(單個TCP連接上進行全雙工通訊的協議)

1.WebSocket全雙工通信協議

????????WebSocket是HTML5開始提供的一種單個TCP連接上進行全雙工通訊的協議。讓客戶端和服務器間的數據交互變得簡單,允許服務端向客戶端主動推送數據。瀏覽器和服務器間只需要完成一次握手,兩者間創建持久性的連接,并進行雙向的數據傳輸

? ? ? ? WebSocket是在應用層實現的協議。握手過程中使用HTTP協議,握手成功升級為全雙工通信通道,成功后WebSocket協議在應用層上定義消息格式和通信規則,通過傳輸層TCP協議上進行數據傳輸。

1.1 如何實現實時推送技術?

Ajax輪詢:輪詢分為(長輪詢與短輪詢)在特定的時間間隔,瀏覽器向服務器發送HTTP請求,服務器返回最新的數據給客戶端。(缺點:需要不斷向服務器發送請求,占用服務器資源和帶寬)

WebSocket:js向服務器發出建立WebSocket連接請求,客戶端與服務端通過TCP連接直接交換數據。

1.2 WebSocket主要的應用場景
  1. 實時通信:在線聊天,視頻會議等
  2. 實時數據推送:新聞,體育賽事直播等,服務器可以主動向客戶端推送更新數據
  3. 協同編輯:在線文檔編輯的視線
  4. 在線游戲:需要實時推送更新游戲狀態,提供低延遲的雙向通信能力

具體的學習可以參考

HTML5 WebSocket | 菜鳥教程HTML5 WebSocket WebSocket 是 HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協議。 WebSocket 使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在 WebSocket API 中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,并進行雙向數據傳輸。 在 WebSocket API 中,瀏覽器和服務器只需要做一個握手的動作,然后,瀏..https://www.runoob.com/html/html5-websocket.html

2.WebSocket相關屬性事件與方法

????????獲取WebSocket連接,通過send()方法向服務器發送數據,并通過onmessage事件接收服務器返回的數據。

2.1 創建WebSocket對象
var Socket = new WebSocket(url, [protocol] );

第一個參數url,指定連接的URL。第二個參數protocol,指定可接受的子協議。

?2.2?WebSocket對象屬性(使用創建的Socket對象)
屬性描述
Socket.readyState

只讀屬性?readyState?表示連接狀態,可以是以下值:

  • 0 - 表示連接尚未建立。

  • 1 - 表示連接已建立,可以進行通信。

  • 2 - 表示連接正在進行關閉。

  • 3 - 表示連接已經關閉或者連接不能打開。

Socket.bufferedAmount

只讀屬性?bufferedAmount?已被 send() 放入正在隊列中等待傳輸,但是還沒有發出的 UTF-8 文本字節數。

2.3??WebSocket事件(使用創建的Socket對象)
事件事件處理程序描述
openSocket.onopen連接建立時觸發
messageSocket.onmessage客戶端接收服務端數據時觸發
errorSocket.onerror通信發生錯誤時觸發
closeSocket.onclose連接關閉時觸發
2.4?WebSocket方法(使用創建的Socket對象)
方法描述
Socket.send()

使用連接發送數據

Socket.close()

關閉連接

3.?WebSocket(node.js作為服務器,js請求連接)

3.1 安裝node.js與npm

根據電腦操作系統下載對應的版本。

3.2 初始化node.js項目

在新建項目文件目錄下通過npm初始化項目。

npm init -y

npm-npm init與npm init -y區別與作用(初始化一個新的node.js項目)-CSDN博客文章瀏覽閱讀43次。npm init與npm init -y區別與作用(初始化一個新的node.js項目) https://blog.csdn.net/2301_76671906/article/details/146195508?fromshare=blogdetail&sharetype=blogdetail&sharerId=146195508&sharerefer=PC&sharesource=2301_76671906&sharefrom=from_link

3.3 在node.js項目中安裝ws庫
npm install ws

ws是流行在node.js中實現WebSocket協議的庫。提供對應的AP來創建WebSocket服務器和客戶端,實現實時雙向通信。

3.4 創建WebSocket服務器-serve.js
// 引入WebSocket模塊
const WebSocket = require('ws');// 創建WebSocket服務器 監聽8080端口
const wss = new WebSocket.Server({ port: 8080 });// 當有新的客戶端連接時 觸發connection事件
wss.on('connection', (ws) => {console.log('新的客戶端已連接');// 收到客戶端消息時 觸發message事件ws.on('message', (message) => {console.log('收到消息: %s', message);// 向所有客戶端廣播消息wss.clients.forEach((client) => {// 判斷客戶端是否處于連接狀態if (client.readyState === WebSocket.OPEN) {// 向處于打開狀態的客戶端廣播接收到的消息client.send(message);}});});// 當客戶端斷開連接時 觸發close事件ws.on('close', () => {console.log('客戶端斷開連接');});
});console.log('WebSocket服務器已啟動,監聽8080端口');
3.5 運行自定義接收傳遞服務器-serve.js

對應的node.js項目中運行

node server.js
3.6 前端html連接serve.js服務
<!DOCTYPE html>
<html>
<head><title>WebSocket測試</title><script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
</head>
<body><div id="app"><input v-model="inputMessage" @input="sendMessage" placeholder="輸入消息"><p>收到的消息: {{ receivedMessage }}</p></div><script>// 創建WebSocket實例,連接到本地的8080端口const ws = new WebSocket('ws://localhost:8080');const app = new Vue({el: '#app',data: {inputMessage: '',receivedMessage: ''},methods: {sendMessage() {// 如果WebSocket連接已打開if (ws.readyState === WebSocket.OPEN) {// 發送輸入框中的內容ws.send(this.inputMessage);}}}});// 當WebSocket連接成功時觸發ws.onopen = function() {console.log('已連接到服務器');};// 當收到服務器發送的消息時觸發ws.onmessage = function(event) {console.log('收到消息: ' + event.data);// 更新Vue實例中的receivedMessage變量app.receivedMessage = event.data;};// 當WebSocket連接關閉時觸發ws.onclose = function() {console.log('連接已關閉');};
</script>
</body>
</html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72122.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72122.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java后端開發day31--集合進階(一)-----Collection集合List集合數據結構1

&#xff08;以下內容全部來自上述課程&#xff09; 1.集合體系結構 List系列集合&#xff1a;添加的元素是有序、可重復、有索引。 Set系列集合&#xff1a;添加的元素是無序、不重復、無索引。 2.Collection集合 Collection是單列集合的祖宗接口&#xff08;不可直接創建…

Qt配置OpenGL相機踩的坑

項目根據LearnOpenGL配置Qt的相機&#xff0c;更新view矩陣和project矩陣的位移向量變得很大&#xff0c;我設置的明明相機位置是(0,0,3)&#xff0c;理想的位移向量剛好是相反數(0,0,-3)&#xff0c;對應的view矩陣位置向量可以變成(0,0,1200)…離模型非常遠矩陣模型也看不見&…

【C++設計模式】第十六篇:迭代器模式(Iterator)

注意&#xff1a;復現代碼時&#xff0c;確保 VS2022 使用 C17/20 標準以支持現代特性。 遍歷聚合對象的統一方式 1. 模式定義與用途 核心思想 ?迭代器模式&#xff1a;提供一種方法順序訪問聚合對象的元素&#xff0c;而無需暴露其內部表示。關鍵用途&#xff1a; 1.?統一…

關于WPS的Excel點擊單元格打開別的文檔的兩種方法的探究【為單元格添加超鏈接】

問題需求 目錄和文件結構如下&#xff1a; E:\Dir_Level1 │ Level1.txt │ └─Dir_Level2│ Level2.txt│ master.xlsx│└─Dir_Level3Level3.txt現在要在master.xlsx點擊單元格進而訪問Level1.txt、Level2.txt、Level3.txt這些文件。 方法一&#xff1a;“單元格右鍵…

聚類中的相似矩陣和拉普拉斯矩陣

前言&#xff08;可以略過&#xff09; 最近在看的是關于聚類的論文&#xff0c;之前對聚類的步驟和相關內容不太了解&#xff0c;為了讀懂論文就去學習了一下&#xff0c;這里將自己的理解記錄下來。學習的不全面&#xff0c;主要是為了看懂論文&#xff0c;后續如果有涉及到聚…

前端筆記 --- vue框架

目錄 基礎知識 指令的修飾符 計算屬性 watch偵聽器的寫法 Vue的生命周期 工程化開發&腳手架 VUE CLI 組件注冊的方式 scoped樣式沖突與原理 data 組件之間的關系和組件通信 v-model詳解 sync修飾符 Dom介紹 操作HTML標簽 總結 ref 和 $refs $nextTick 自…

智能雙劍合璧:基于語音識別與大模型的技術沙龍筆記整理實戰

智能雙劍合璧&#xff1a;基于語音識別與大模型的技術沙龍筆記整理實戰 ——記一次網絡安全技術沙龍的高效知識沉淀 引言&#xff1a;當網絡安全遇上AI生產力工具 在綠盟科技舉辦的"AI驅動的未來網絡安全"內部技術沙龍中&#xff0c;筆者親歷了一場關于網絡安全攻…

數據結構(藍橋杯常考點)

數據結構 前言&#xff1a;這個是針對于藍橋杯競賽常考的數據結構內容&#xff0c;基礎算法比如高精度這些會在下期給大家總結 數據結構 競賽中&#xff0c;時間復雜度不能超過10的7次方&#xff08;1秒&#xff09;到10的8次方&#xff08;2秒&#xff09; 空間限制&#x…

使用 UNIX 命令在設計中搜索標識符:vcsfind 的入門指南

在現代軟件開發和硬件設計中&#xff0c;快速準確地定位和搜索特定標識符是提高開發效率的關鍵。本文將介紹如何使用 UNIX 命令 vcsfind 在設計中搜索標識符&#xff0c;幫助您更高效地管理您的項目。 什么是 vcsfind&#xff1f; vcsfind 是一個強大的 UNIX 命令行工具&#x…

第56天:Web攻防-SQL注入增刪改查盲注延時布爾報錯有無回顯錯誤處理審計復盤

#知識點 1、Web攻防-SQL注入-操作方法&增刪改查 2、Web攻防-SQL注入-布爾&延時&報錯&盲注 一、增刪改查 1、功能&#xff1a;數據查詢 查詢&#xff1a;SELECT * FROM news where id$id 2、功能&#xff1a;新增用戶&#xff0c;添加新聞等 增加&#xff1a;IN…

跳表實現學習

1.介紹 2.源碼 跳表節點&#xff1a; /* ZSETs use a specialized version of Skiplists */ /*** brief 定義跳躍表節點的數據結構。* * 該結構體用于表示跳躍表中的一個節點&#xff0c;包含元素、分數、后向指針和多層鏈表信息。*/ typedef struct zskiplistNode {sds ele;…

Python:正則表達式

正則表達式的基礎和應用 一、正則表達式核心語法&#xff08;四大基石&#xff09; 1. ?元字符&#xff08;特殊符號&#xff09;? ?定位符 ^&#xff1a;匹配字符串開始位置 $&#xff1a;匹配字符串結束位置 \b&#xff1a;匹配單詞邊界?&#xff08;如 \bword\b 匹配…

EB-Cable許可管理中的數據安全與隱私保護

在數字化時代&#xff0c;數據安全與隱私保護已成為企業關注的重中之重。作為專業的電纜管理軟件&#xff0c;EB-Cable許可管理不僅在功能豐富和操作便捷方面表現出色&#xff0c;更在數據安全與隱私保護方面為用戶提供了堅實的保障。本文將詳細介紹EB-Cable許可管理在數據安全…

串口通信函數匯總-ing

謝謝各位佬的閱讀&#xff0c;本文是我自己的理解&#xff0c;如果您發現錯誤&#xff0c;麻煩請您指出&#xff0c;謝謝 首先談談我自己對于串口的理解&#xff0c;隨便拿一個嵌入式的板子&#xff0c;它上面有兩個引腳&#xff0c;一個是rx&#xff0c;一個是tx&#xff0c;r…

如何用HTML5 Canvas實現電子簽名功能??

&#x1f916; 作者簡介&#xff1a;水煮白菜王&#xff0c;一位前端勸退師 &#x1f47b; &#x1f440; 文章專欄&#xff1a; 前端專欄 &#xff0c;記錄一下平時在博客寫作中&#xff0c;總結出的一些開發技巧和知識歸納總結?。 感謝支持&#x1f495;&#x1f495;&#…

大模型開源的工具包有哪些特殊符號可以使用;SEP 是什么

大模型開源的工具包有哪些特殊符號可以使用 目錄 大模型開源的工具包有哪些特殊符號可以使用自定義特殊token:special_tokens=True一、**對話輪次分隔符(必選)**二、**系統提示標記(提升指令理解)**三、**中文特色分隔符(貼合書寫習慣)**四、**開源模型專屬符號(按文檔…

控制系統分類

文章目錄 定義與特點1. 自治系統&#xff08;Autonomous System&#xff09;與非自治系統&#xff08;Non-Autonomous System&#xff09;自治系統非自治系統 2. 線性系統&#xff08;Linear System&#xff09;與非線性系統&#xff08;Nonlinear System&#xff09;線性系統非…

通過 ElasticSearch的Python API和`curl` 命令獲取Elasticsearch 所有索引名稱

導言 在大數據管理和實時搜索場景中&#xff0c;Elasticsearch 是一款不可或缺的工具。無論是開發調試、數據維護&#xff0c;還是系統監控&#xff0c;快速列出所有索引名稱都是一個高頻需求。本文將手把手教你如何通過 Python 客戶端連接 Elasticsearch&#xff0c;并用兩種方…

2024年廣州市智能網聯汽車創新實踐年度報告

政策法規方面&#xff0c;積極推進《廣州市智能網聯汽車創新發展條例》的制定和發布&#xff0c;不斷完善法規標準體系&#xff0c;為產業創新發展營造良好政策環境&#xff1b;技術創新方面&#xff0c;企業加大研發投入&#xff0c;在自動駕駛算法、車聯網安全等關鍵領域取得…

計算機操作系統(一) 什么是操作系統

計算機操作系統&#xff08;一&#xff09; 什么是操作系統 前言一、什么是操作系統二、操作系統的作用三、推動操作系統發展的主要動力總結&#xff08;核心概念速記&#xff09;&#xff1a; 前言 當你打開電腦、點擊應用、播放音樂時&#xff0c;是誰在背后默默協調這一切&…