在Node.js中使用WebSockets的方法

883 阅读2分钟

WebSockets是网络应用程序中HTTP通信的替代品。它们在客户端和服务器之间提供了一个长期的、双向的通信渠道。

WebSockets是Web应用中HTTP通信的替代方案。

它们在客户端和服务器之间提供了一个长期的、双向的通信渠道。

一旦建立,通道就会保持开放,提供一个非常快速的连接,延迟和开销都很低。

浏览器对WebSockets的支持

所有现代浏览器都支持WebSockets。

Browser support for WebSockets

WebSockets与HTTP有何不同

HTTP是一种非常不同的协议,也是一种不同的通信方式。

HTTP是一个请求/响应协议:服务器在客户端请求时返回一些数据。

有了WebSockets。

  • 服务器可以向客户端发送一个消息,而不需要客户端明确请求什么。
  • 客户端和服务器可以同时相互交谈
  • 发送消息所需的数据开销非常小。这意味着低延迟的通信

WebSockets非常适用于实时长期的通信。

HTTP非常适用于偶尔的数据交换和由客户端发起的互动。

HTTP的实现要简单得多,而WebSockets需要的开销要多一点。

安全的WebSockets

始终使用安全的、加密的WebSockets协议,wss://

ws:// 指的是不安全的WebSockets版本(WebSockets的 ),由于明显的原因,应该避免使用。http://

创建一个新的WebSockets连接

const url = 'wss://myserver.com/something'
const connection = new WebSocket(url)

connection 是一个WebSocket对象。

当连接成功建立时,open 事件被触发。

通过给connection 对象的onopen 属性分配一个回调函数来监听它。

connection.onopen = () => {
  //...
}

如果有任何错误,onerror 函数回调被触发。

connection.onerror = error => {
  console.log(`WebSocket error: ${error}`)
}

使用WebSockets向服务器发送数据

一旦连接被打开,你就可以向服务器发送数据。

你可以在onopen 回调函数内方便地这样做。

connection.onopen = () => {
  connection.send('hey')
}

使用WebSockets从服务器接收数据

onmessage 上的回调函数进行监听,当收到message 事件时就会调用该函数。

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

在Node.js中实现一个WebSockets服务器

ws是一个用于Node.js的流行的WebSockets库。

我们将用它来建立一个WebSockets服务器。它也可以用来实现一个客户端,并使用WebSockets在两个后端服务之间通信。

使用以下方法轻松地安装它

你需要写的代码非常少。

const WebSocket = require('ws')

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

wss.on('connection', ws => {
  ws.on('message', message => {
    console.log(`Received message => ${message}`)
  })
  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