WebSocket协议 学习笔记

Posted Shi Peng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebSocket协议 学习笔记相关的知识,希望对你有一定的参考价值。

一、WebSocket协议简介

WebSocket是应用层协议。
用于C/S架构应用中实现双向通信。
虽然WebSocket协议在建立连接时会使用HTTP协议,但这并不意味着WebSocket协议是基于HTTP协议实现的。

二、WebSocket协议与HTTP协议的区别

1、通信方式不同

1)WebSocket是双向通行模式,客户端与服务端之间只有在握手时使用了HTTP的“请求-响应”模式,而一旦建立连接完成后,通信则使用双向模式交互。WebSocket模式客户端和服务端可以互相发消息,而HTTP发消息是单向的。

2、协议格式不同

1)HTTP协议比较臃肿,而WebSocket协议比较清理
2)HTTP协议一个数据包就是个完整的消息;而WebSocket客户端与服务端通信的最小单位是帧(frame),由1个或多个帧组成一条完整的消息(message)。即:发送端将消息切割成多个帧,并发送给服务端;服务端接收消息帧,并将关联的帧重新组装成完整的消息。

WebSocket的协议格式:

0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len |    Extended payload length    |
|I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
|N|V|V|V|       |S|             |   (if payload len==126/127)   |
| |1|2|3|       |K|             |                               |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
|     Extended payload length continued, if payload len == 127  |
+ - - - - - - - - - - - - - - - +-------------------------------+
|                               |Masking-key, if MASK set to 1  |
+-------------------------------+-------------------------------+
| Masking-key (continued)       |          Payload Data         |
+-------------------------------- - - - - - - - - - - - - - - - +
:                     Payload Data continued ...                :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|                     Payload Data continued ...                |
+---------------------------------------------------------------+

HTTP请求消息格式:

Request-LineCRLF
general-headerCRLF
request-headerCRLF
entity-headerCRLF
CRLF
[ message-body ]

HTTP响应消息格式:

Status-LineCRLF
general-headerCRLF
response-headerCRLF
entity-headerCRLF
CRLF
[ message-body ]

三、为什么要使用WebSocket通信协议

1、客户端定时查询

客户端每10秒查询一次服务端

2、长轮询机制

长轮询机制是对客户端定时轮询机制的改进,即:客户端依旧保持定时发送请求给服务端,但服务端并不立即响应,而是等到有真正数据更新时,才发送给客户端。实际上,并不是当没有数据更新时服务端就永远不响应客户端,而是需要在等待一个超长时间之后结束此次长轮询请求。

3、HTTP Streaming

无论是长轮询还是客户端定时查询,都需要客户端不断发请求给服务端,而HTTP Streaming试图改变这种方式,其实现机制为:客户端发送获取数据更新请求到服务端时,服务端将保持该请求的响应数据流一直打开,只要有数据更新就实时地发送给客户端。

四、WebSocket协议优势总结

1、支持双向通信,实时性更强
2、支持二进制
3、较少的控制开销,连接建立后,WebSocket客户端、服务端进行数据交换时,协议控制的数据包头部较小
4、支持扩展

相比客户端定时查询方式,当数据更新频率不确定时,长轮询机制能够明细地减少请求数。

以上是关于WebSocket协议 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket学习笔记

WebSocket学习笔记

ESP32 单片机学习笔记 - 08 - WebSocket客户端

WebSocket学习笔记

Wireshark文档阅读笔记-WebSocket协议基本概念

spring mvc 学习笔记---前言