WebSocket学习路线

如何学习WebSocket先听听chatGPT怎么说?

说了这么多,可能要翻阅很多资料,直接进入学习模式:

什么是WebSocket?

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许客户端和服务器之间进行实时的双向数据传输。与传统的 HTTP 请求-响应模式不同,WebSocket 在建立连接后,客户端和服务器可以随时发送消息给对方,而不需要等待对方的响应。以下是 WebSocket 的基本概念:

  1. 全双工通信:WebSocket 提供了全双工通信的能力,客户端和服务器可以在同一个 TCP 连接上同时进行双向数据传输,而无需等待对方的请求或响应。
  2. 持久连接:与传统的 HTTP 连接不同,WebSocket 连接是持久的,一旦建立连接,它将保持打开状态,直到其中一方选择关闭连接。
  3. 轻量级协议:WebSocket 是一种轻量级的协议,它使用较少的资源,并且不像 HTTP 请求那样需要在每次通信时发送大量的头部信息。
  4. 基于事件驱动:WebSocket 是基于事件驱动的,它允许服务器在任何时候向客户端推送数据,而不需要客户端发送请求。
  5. 安全性:WebSocket 可以通过加密(例如 TLS/SSL)来保证通信的安全性,确保数据在传输过程中不被窃听或篡改。
  6. 跨域支持:WebSocket 支持跨域通信,允许客户端和服务器之间在不同的域上进行通信。

总的来说,WebSocket 提供了一种更高效、更实时的通信方式,适用于需要实时双向数据传输的应用场景,例如在线聊天应用、实时数据监控应用、在线游戏等。

WebSocket与传统的 HTTP 请求有什么区别?

WebSocket 和传统的 HTTP 请求之间有几个重要的区别:

  1. 连接方式:
  • HTTP 请求:传统的 HTTP 请求-响应模式是一种短连接,每个请求都需要建立一个新的 TCP 连接,并在请求完成后立即关闭连接。
  • WebSocket:WebSocket 是一种长连接,一旦建立连接,它将保持打开状态,允许客户端和服务器之间进行实时的双向数据传输,而无需重复建立连接。
  1. 数据传输方式:
  • HTTP 请求:在 HTTP 请求中,客户端发送请求给服务器,服务器返回响应给客户端。这是一种单向的通信方式,客户端需要等待服务器的响应才能继续进行下一步操作。
  • WebSocket:WebSocket 允许客户端和服务器之间进行双向的实时数据传输,客户端和服务器都可以随时发送消息给对方,而不需要等待对方的响应。
  1. 消息头部:
  • HTTP 请求:HTTP 请求通常包含大量的头部信息(如请求头、响应头等),这些头部信息可能占据了请求的很大一部分内容。
  • WebSocket:WebSocket 是一种轻量级的协议,它的消息头部相对较少,通信效率更高。
  1. 协议特点:
  • HTTP 请求:HTTP 是一种无状态协议,每个请求都是独立的,服务器不会保留与之前请求的任何状态信息。
  • WebSocket:WebSocket 是一种有状态协议,它通过建立长连接来维持客户端和服务器之间的状态,并允许服务器向客户端推送数据。

WebSocket 协议的主要特点之一是它的简单握手过程和轻量级数据帧结构。以下是关于 WebSocket 协议的握手过程、数据帧结构和消息格式的简要说明:

  1. 握手过程:
  • 客户端发起握手请求:客户端发送一个 HTTP 请求到服务器,请求中包含一些特定的头部信息,如 Upgrade: websocketConnection: UpgradeSec-WebSocket-Key 等。
  • 服务器返回握手响应:服务器收到客户端的握手请求后,返回一个 HTTP 101 状态码(表示协议切换),响应中包含一些特定的头部信息,如 Upgrade: websocketConnection: UpgradeSec-WebSocket-Accept 等。
  • 握手成功:一旦客户端收到服务器的握手响应并验证通过,连接即被建立,客户端和服务器可以开始通过 WebSocket 协议进行通信。
  1. 数据帧的结构:
    WebSocket 使用数据帧来传输数据,每个数据帧包含一个或多个字节的有效载荷(payload),以及一些控制信息。
  • FIN(1 位):指示这个数据帧是否是消息的最后一帧。
  • RSV1、RSV2、RSV3(各 1 位):保留位,暂时无用。
  • OpCode(4 位):指示数据帧的类型,如文本帧、二进制帧、连接关闭帧等。
  • MASK(1 位):指示有效载荷是否经过掩码处理。
  • Payload Length(7 位或 7+16 位或 7+64 位):指示有效载荷的长度。
  • Masking Key(0 或 4 字节):如果 MASK 标志被设置,包含 4 字节的掩码密钥。
  • Payload Data(可变长度):有效载荷数据。
  1. 消息格式:
    每个消息可以由一个或多个数据帧组成,消息的格式由数据帧的结构和类型决定。常见的消息格式包括文本消息、二进制消息和控制消息(如连接关闭消息、心跳消息等)。

WebSocket应用四种方式

源码解析:

https://github.com/rookie-ricardo/spring-boot-learning-demo?tab=readme-ov-file

https://github.com/rstoyanchev/spring-websocket-portfolio

https://spring.io/guides/gs/messaging-stomp-websocket

参考文档:

https://blog.csdn.net/m0_69860228/article/details/125156487

https://blog.csdn.net/qq_16992475/article/details/123413624

https://blog.csdn.net/qq_16992475/article/details/130185830

https://blog.csdn.net/leesinbad/article/details/133993369

STOMP协议详解

STOMP(Simple Text Oriented Messaging Protocol)是一种简单的基于文本的消息传递协议,用于在客户端和消息代理(如消息队列)之间进行通信。以下是关于 STOMP 协议的详细说明:

  1. 基本概念:
  • STOMP 是一种面向文本的协议,它使用简单的文本命令和文本消息来进行通信。
  • STOMP 协议设计简洁、易于实现,适用于多种语言和平台。
  1. 特点:
  • 支持多种消息代理:STOMP 可以与多种消息代理(如 ActiveMQ、RabbitMQ、Apollo 等)配合使用。
  • 跨语言、跨平台:STOMP 可以在不同的编程语言和平台之间进行通信。
  • 简单易懂:STOMP 使用简单的文本命令和文本消息格式,易于理解和实现。
  1. 协议结构:
  • STOMP 协议由一系列命令(command)和头部(header)组成,每个命令和头部以换行符(\n)分隔,消息体(body)以空行分隔。
  • 命令(command):STOMP 定义了一系列命令,包括 CONNECT、SEND、SUBSCRIBE、UNSUBSCRIBE、ACK、NACK、BEGIN、COMMIT、ABORT、DISCONNECT 等。
  • 头部(header):每个命令可以包含一系列头部,用于传递附加信息,如目的地、订阅 ID、消息 ID 等。
  • 消息体(body):部分命令允许包含消息体,用于传递消息内容。
  1. 示例:
    下面是一个简单的 STOMP 协议示例:
   CONNECT
   login:username
   passcode:password

   SUBSCRIBE
   destination:/queue/test

   SEND
   destination:/queue/test
   content-type:text/plain

   Hello, STOMP!
  1. 应用场景:
  • 实时消息传递:STOMP 可用于构建实时消息传递系统,如聊天应用、即时通讯系统等。
  • 消息队列:STOMP 可用于与消息队列集成,实现消息的发布和订阅等功能。
  • 事件驱动系统:STOMP 可用于构建事件驱动系统,实现事件的发布和订阅。

总的来说,STOMP 是一种简单、轻量级的消息传递协议,适用于构建实时消息传递系统和事件驱动系统等应用场景。


Posted

in

by

Tags:

Comments

One response to “WebSocket学习路线”

Leave a Reply

Your email address will not be published. Required fields are marked *