Skip to content
扫码开始移动端阅读

WebSocket (WS) 与 Secure WebSocket (WSS)

WebSocket

WebSocket是一种在单个TCP连接上提供全双工通信的协议。相较于传统的HTTP协议,WebSocket支持实时双向通信,使得服务器可以主动推送信息到客户端,而不需要客户端发起请求。发布于2011年的RFC 6455规范定义了WebSocket协议。目前版本已经被所有主流浏览器支持。

端口

  • ws: 80
  • wss 443

WebSocket的特点

  • 💻 配置简单 可以在大多数的设备上进行连接,基本支持http协议的地方都支持ws协议。
  • 🔐 安全性较好 通过wss协议进行传输,可以有效的防止数据被窃取
  • 🌐 兼容性好 兼容性好,除了IE6-IE9不支持外,其他主流浏览器都支持。
  • 📉 低带宽消耗 通信数据包较小,适用于带宽有限的环境。但是mqtt所需要的数据包更小
  • 📉 低延迟 适用于对通信延迟要求较高的应用场景,如在线游戏、实时视频等。

应用场景

股票行情、聊天应用、实时协作、实时游戏等

前端常用库

Socket.io 、 SockJS 、 WebSocket-Node 浏览器原生WebSocket

HTTP 与 Secure HTTP (HTTPS)

HTTP

HTTP(Hypertext Transfer Protocol)是一种基于请求与响应模式的、无状态的协议。它通常用于从Web服务器传输超文本到本地浏览器。发布于1991年的HTTP/0.9是第一个版本的HTTP协议。目前广泛使用的是HTTP/1.1和HTTP/2。

端口

  • http: 80
  • https 443

HTTP的特点

  • 🌐 简单快速: HTTP协议简单易懂,通信速度较快。
  • 💻 易于调试: 使用浏览器的开发者工具可以方便地调试HTTP请求和响应。
  • 🔐 安全性较好: HTTP通信可以使用TLS加密,安全性较好。
  • 🙌 生态丰富: HTTP协议的生态非常丰富,有大量的工具可以使用。
  • 📉 经久耐用: 常见的请求类型可以包括 GETPOSTPUTDELETEHEADOPTIONS 等,可以满足大部分应用场景的需求。
  • 🔄 无连接: HTTP协议是无连接的,每次请求都需要建立连接,通信效率较低。
  • 📉 不安全: HTTP通信使用明文传输,可能被窃听。即使https也可能通过伪造证书进行中间人攻击。
  • 📉 不稳定: HTTP协议没有断线重连机制,网络不稳定时容易导致连接中断。

应用场景

网页浏览、文件下载、API调用等。

前端常用库

Axios、Fetch、SuperAgent、Ajax nodejs原生http模块

MQTT 与 Secure MQTT (MQTTS)

MQTT

MQTT(Message Queuing Telemetry Transport)是一种轻量级、开放、简单易实现的通讯协议。它适用于受限环境,特别是物联网(IoT)环境。发布于1999年的MQTT v5.0是目前广泛使用的版本。

MQTT的特点

  • 🌐 低带宽消耗: 消息头小,适用于带宽有限的环境。
  • ✨ 运行占用特别低: 适用于大多数无线控制的智能家居,包括物联网设备。
  • 😂 不兼容浏览器: 在浏览器环境下,目前我见过的库实现mqtt是通过websocket来实现的,所以还需要服务端进行配置兼容ws的选项
  • 📉 低延迟: 适用于对通信延迟要求较高的应用场景,如物联网设备控制。
  • 📉 不可靠: 无法保证数据可靠传输,可能导致数据丢失。虽然mqtt有qos1和qos2,但是也无法保证数据不丢失。
  • 🔄 无连接: 无连接的特性使得对数据的处理较为复杂。但是mqtt有保持连接的机制,可以保持连接。
  • 😒 安全性一般: MQTT通信使用明文传输,可能被窃听。即使mqtts也可能通过伪造证书进行中间人攻击。
  • 🤡 只支持订阅: 只能通过订阅主题的方式实现类似广播、多播、组播的效果。

常见应用场景

MQTT被广泛应用于物联网场景,例如智能家居设备之间的通信和控制。还有共享单车、共享充电宝等设备的控制。

前端常用库

MQTT.js 、 Paho-MQTT 、Emqtt

UDP (User Datagram Protocol)

UDP

UDP(User Datagram Protocol)是一种无连接的传输层协议。它不提供可靠性、顺序传输或者错误恢复,但是速度较快,适用于实时性要求高的场景。

端口

  • 不定,可以自定义

UDP的特点

  • 😋点对点: 适用于点对点通信,可以实现广播、多播、组播等。
  • 🌐 简单快速: UDP协议简单易懂,通信速度较快。
  • 📢通过端口号区分应用: 可以通过端口号区分应用,适用于多应用共存的场景。
  • 📉 低延迟: 适用于对通信延迟要求较高的应用场景,如在线游戏、实时视频等。
  • 📉 低带宽消耗: 通信数据包较小,适用于带宽有限的环境。

常用场景

视频监控 、在线视频 、 游戏等

前端常用库

dgram 、 UDP.js 、 UDP-socket

省流侠

协议兼容性可靠性上手难度潜力
WebSocket (WS)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Secure WebSocket (WSS)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
HTTP⭐⭐⭐⭐⭐⭐⭐⭐
Secure HTTP (HTTPS)⭐⭐⭐⭐⭐⭐⭐⭐
MQTT⭐⭐⭐⭐⭐
Secure MQTT (MQTTS)⭐⭐⭐⭐⭐
UDP⭐⭐⭐⭐⭐⭐⭐

⭐评分:表示协议在该方面的评级,⭐⭐⭐表示高,⭐⭐表示中,⭐表示低。