/

使用 Node.js 使用 WebSockets

使用 Node.js 使用 WebSockets

WebSockets 是 Web 應用程式中 HTTP 通訊的替代方案。它們提供了一個長期存在的、雙向的客戶端和伺服器之間的通訊通道。

WebSockets 是 Web 應用程式中 HTTP 通訊的替代方案。
它們提供了一個長期存在的、雙向的客戶端和伺服器之間的通訊通道。
一旦建立,通道保持開啟,提供非常快速的連線速度和低延遲。

支援 WebSockets 的瀏覽器

所有現代瀏覽器都支援 WebSockets。

WebSockets 與 HTTP 的區別

HTTP 是一個非常不同的協議,也是一種不同的溝通方式。

HTTP 是一種請求/回應協議:當客戶端發出請求時,伺服器回傳一些資料。

而 WebSockets:

  • 伺服器可以在未經客戶端明確請求的情況下傳送訊息給客戶端
  • 客戶端和伺服器可以同時彼此對話
  • 傳送訊息時需要交換的資料量非常少。這意味著通訊延遲低

WebSockets 非常適合實時和長期存在的通訊。

HTTP 非常適合偶爾的資料交換和由客戶端啟動的互動。

HTTP 的實作要簡單得多,而 WebSockets 需要更多的開銷。

安全的 WebSockets

請總是使用安全、加密的 WebSockets 協議 wss://

ws:// 是不安全的 WebSockets 版本(WebSockets 的 http://),出於明顯的原因應該避免使用。

建立新的 WebSockets 連線

1
2
const url = 'wss://myserver.com/somet hing'
const connection = new WebSocket(url)

connection 是一個 WebSocket 物件。

當連線建立成功時,將觸發 open 事件。

通過將回調函式分配給 connection 物件的 onopen 屬性,來監聽此事件:

1
2
3
connection.onopen = () => {
//...
}

若出現任何錯誤,將觸發 onerror 函式回調:

1
2
3
connection.onerror = error => {
console.log(`WebSocket 錯誤:${error}`)
}

使用 WebSockets 將資料發送給伺服器

連線建立後,你可以向伺服器發送資料。

你可以在 onopen 回調函式中方便地這樣做:

1
2
3
connection.onopen = () => {
connection.send('嗨')
}

使用 WebSockets 從伺服器接收資料

使用回調函式在 onmessage 上監聽,當收到 message 事件時會調用:

1
2
3
connection.onmessage = e => {
console.log(e.data)
}

在 Node.js 中實作 WebSockets 伺服器

ws 是一個流行的 Node.js WebSockets 庫。

我們將使用它來建立一個 WebSockets 伺服器。它還可以用於實作客戶端,並使用 WebSockets 在兩個後端服務之間進行通訊。

輕鬆安裝它:

1
2
yarn init
yarn add ws

你只需要寫很少的程式碼:

1
2
3
4
5
6
7
8
9
10
const WebSocket = require('ws')

const wss = new WebSocket.Server({ port: 8080 })

wss.on('connection', ws => {
ws.on('message', message => {
console.log(`收到訊息 => ${message}`)
})
ws.send('嘿!')
})

此程式碼在 8080 埠(WebSockets 的預設埠)上建立了一個新的伺服器,當建立連線時,它會向客戶端發送 嘿!,並記錄所接收到的訊息。

在 Glitch 上查看實時範例

以下是一個 WebSockets 伺服器的實時範例:https://glitch.com/edit/#!/flavio-websockets-server-example

以下是與伺服器互動的 WebSockets 客戶端的範例:https://glitch.com/edit/#!/flavio-websockets-client-example