WebSocket是Web應用程序中HTTP通信的替代方法。它們在客戶端和服務器之間提供了長期的雙向通信通道。
WebSocket是Web應用程序中HTTP通信的替代方法。
它們在客戶端和服務器之間提供了長期的雙向通信通道。
建立通道後,通道將保持開放狀態,從而提供非常快速的連接,且延遲時間和開銷均較低。
瀏覽器對WebSocket的支持
所有現代瀏覽器都支持WebSocket。
WebSockets與HTTP有何不同
HTTP是一個非常不同的協議,也是一種不同的通信方式。
HTTP是一個請求/響應協議:服務器在客戶端請求時返回一些數據。
使用WebSockets:
- 這服務器可以向客戶端發送消息沒有客戶明確要求的東西
- 客戶端和服務器可以同時互相交談
- 很少的數據開銷需要進行交換以發送消息。這意味著低延遲通信。
Web套接字非常適合即時的和長壽的通訊。
HTTP非常適合偶爾的數據交換以及客戶發起的互動。
HTTP更簡單實現,而WebSocket則需要更多的開銷。
安全的WebSockets
始終對WebSocket使用安全的加密協議,wss://
。
ws://
指的是不安全的WebSockets版本(http://
WebSockets),並且出於明顯的原因應避免使用。
創建一個新的WebSockets連接
const url = 'wss://myserver.com/something'
const connection = new WebSocket(url)
connection
是一個WebSocket目的。
成功建立連接後,open
事件被觸發。
通過將回調函數分配給onopen
的屬性connection
目的:
connection.onopen = () => {
//...
}
如果有任何錯誤,onerror
函數回調被觸發:
connection.onerror = error => {
console.log(`WebSocket error: ${error}`)
}
使用WebSockets將數據發送到服務器
打開連接後,您可以將數據發送到服務器。
您可以在內部方便地進行操作onopen
回調函數:
connection.onopen = () => {
connection.send('hey')
}
使用WebSocket從服務器接收數據
使用回調函數進行監聽onmessage
,當message
收到事件:
connection.onmessage = e => {
console.log(e.data)
}
在Node.js中實現WebSockets服務器
我們將使用它來構建WebSockets服務器。它還可以用於實現客戶端,並使用WebSocket在兩個後端服務之間進行通信。
使用輕鬆安裝
yarn init
yarn add ws
您需要編寫的代碼很少:
const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 8080 })
wss.on(‘connection’, ws => {
ws.on(‘message’, message => {
console.log(Received message => </span><span style="color:#e6db74">${</span><span style="color:#a6e22e">message</span><span style="color:#e6db74">}</span><span style="color:#e6db74">
)
})
ws.send(‘ho!’)
})
這段代碼在端口8080(WebSockets的默認端口)上創建了一個新服務器,並在建立連接時添加了一個回調函數,發送ho!
發送給客戶端,並記錄其收到的消息。
查看有關Glitch的實時示例
這是一個WebSockets服務器的實時示例:https://glitch.com/edit/#!/flavio-websockets-server-example
這是一個與服務器交互的WebSockets客戶端:https://glitch.com/edit/#!/flavio-websockets-client-example
免費下載我的Node.js手冊
更多節點教程:
- npm軟件包管理器簡介
- Node.js簡介
- 使用Axios的HTTP請求
- 在何處託管Node.js應用
- 使用Node.js與Google Analytics(分析)API進行交互
- npx節點包運行器
- package.json指南
- npm在哪里安裝軟件包?
- 如何更新Node.js
- 如何使用或執行使用npm安裝的軟件包
- package-lock.json文件
- 使用npm的語義版本控制
- 您是否應該將node_modules文件夾提交到Git?
- 將所有Node依賴項更新到最新版本
- 使用Node.js解析JSON
- 查找npm軟件包的安裝版本
- Node.js流
- 安裝較舊版本的npm軟件包
- 在Node中獲取當前文件夾
- 如何在Node中記錄對象
- 使用導出從Node文件公開功能
- 節點和瀏覽器之間的區別
- 使用Node發出HTTP POST請求
- 使用Node獲取HTTP請求主體數據
- 節點緩衝區
- Node.js的簡要歷史
- 如何安裝Node.js
- 使用Node您需要知道多少JavaScript?
- 如何使用Node.js REPL
- 節點,從命令行接受參數
- 使用Node輸出到命令行
- 接受來自Node中命令行的輸入
- 使用`npm uninstall`來卸載npm軟件包。
- npm全局或本地軟件包
- npm依賴項和devDependencies
- Node.js事件循環
- 了解process.nextTick()
- 了解setImmediate()
- 節點事件發射器
- 建立一個HTTP服務器
- 使用Node發出HTTP請求
- Node fs模塊
- 使用Axios的Node中的HTTP請求
- 使用Node讀取文件
- 節點文件路徑
- 用Node寫入文件
- 節點文件統計
- 在Node中使用文件描述符
- 在Node中使用文件夾
- 節點路徑模塊
- Node http模塊
- 將WebSockets與Node.js結合使用
- 使用MySQL和Node的基礎知識
- Node.js中的錯誤處理
- 哈巴狗指南
- 如何從Node.js讀取環境變量
- 如何從Node.js程序退出
- Node os模塊
- 節點事件模塊
- 節點,開發與生產之間的區別
- 如何檢查Node.js中是否存在文件
- 如何在Node.js中創建一個空文件
- 如何使用Node.js刪除文件
- 如何使用Node.js獲取文件的最後更新日期
- 如何在JavaScript中確定日期是否為今天
- 如何將JSON對象寫入Node.js中的文件
- 為什麼要在下一個項目中使用Node.js?
- 從任何文件夾運行Web服務器
- 如何將MongoDB與Node.js結合使用
- 使用Chrome DevTools調試Node.js應用
- 什麼是pnpm?
- Node.js運行時v8選項列表
- 使用npm時如何解決“缺少寫訪問權限”錯誤
- 如何在Node.js中啟用ES模塊
- 如何使用Node.js生成子進程
- 如何在Express中同時獲取已解析的正文和原始正文
- 如何在Node.js中處理文件上傳
- 節點模塊中的對等依賴性是什麼?
- 如何使用Node.js編寫CSV文件
- 如何使用Node.js讀取CSV文件
- 節點核心模塊
- 使用Node.js一次增加多個文件夾的數量
- 如何將畫布打印到數據URL
- 如何使用Node.js和Canvas創建和保存圖像
- 如何使用Node.js下載圖像
- 如何在Node.js中批量重命名文件
- 如何獲取Node中文件夾中所有文件的名稱
- 如何使用Promise和基於Node.js回調的等待功能
- 如何在本地測試NPM軟件包
- 如何在運行時檢查當前的Node.js版本
- 如何使用Sequelize與PostgreSQL交互
- 使用Node.js服務HTML頁面
- 如何解決Node.js中的util.pump不是函數錯誤