WebSocket通信协议,一篇文章了解

作者:admin 2023-03-16

websocket协议详解.jpg

websocket是什么?

websocket是一种浏览器与服务器进行全双工通信的网络技术,属于 应用层协议。它 基于TCP传输协议,并 复用HTTP 的握手通道,用来弥补HTTP协议在持久通信能力上的不足。

ws 默认端口:80

wss 默认端口:443

Websocket 通过HTTP协议握手。

websocket的特点有哪些?

节省资源开销,HTTP请求每次都要携带完整的头部,此项开销显著减少了;

更强的实时性,由于协议是全双工通信,所以服务器可以主动给客户端推送数据,相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;

保持连接状态,能够记录用户状态,通信时可以省略部分状态信息,不像HTTP每次都需要携带用户认证信息;

更好的二进制支持,Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。

websocket如何建立连接?

websocket 通过 HTTP 请求建立握手,状态码为 101(协议升级)

客户端:申请协议升级

客户端先发起协议升级请求,采用的是HTTP数据格式,且只支持GET方法

GET / HTTP/1.1

Host: localhost:8080

Origin: http://127.0.0.1:3000

Connection: Upgrade

Upgrade: websocket

Sec-WebSocket-Version: 13

Sec-WebSocket-Key: w4v7O6xFTi36lq3RNcgctw==

重点请求首部意义如下:

Connection: Upgrade:表示升级协议

Upgrade: websocket:表示升级到websocket协议。

Sec-WebSocket-Version: 13:表示websocket的版本。如果服务端不支持该版本,需要返回一个Sec-WebSocket-Versionheader,里面包含服务端支持的版本号。

Sec-WebSocket-Key:与后面服务端响应首部的Sec-WebSocket-Accept是配套的,提供基本的防护,比如恶意的连接,或者无意的连接。

注意,上面省略了非重点请求首部

服务器:响应协议升级

服务端返回内容如下,状态代码101表示协议切换。到此完成协议升级,后续的数据交互都按照新的协议来。

HTTP/1.1 101 Switching Protocols

Connection:Upgrade

Upgrade: websocket

Sec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU=

websocket心跳机制是什么?

WebSocket为了保持客户端与服务端的实时双向通信,需要确保客户端与服务端之间的TCP通道保持连接没有断开。然而,对于长时间没有数据往来的连接,如果依旧长时间保持着,可能会浪费包括的连接资源。

但不排除有些场景,客户端、服务端虽然长时间没有数据往来,但仍需要保持连接。这个时候,可以采用心跳来实现。

sender - > receiver:ping

receiver - > sender:pong

ping、pong的操作,对应的是WebSocket的两个控制帧,opcode分别是0x9、0xA。

websocket应用场景有哪些?

即时通信

直播

游戏

在线协同工具(例如语雀笔记、腾讯文档等)

实时数据拉取和推送

地图

(凡是需要数据实时传输的一般都会使用到websocket)

websocket与http的区别

相同点:

都是基于TCP协议进行数据传输

都属于应用层协议

不同点:

websocket是双向通信协议,而HTTP是单向通信

websocket是有状态的,而HTTP是无状态的

联系点:

websocket在建立握手时,数据是通过HTTP协议传输的(HTTP只进行了握手动作),

但是握手之后,单独建立了一条TCP通信通道,之后数据都是基于TCP协议直接传输,不需要HTTP协议了。

websocket与socket的区别

可以理解为张三和张三丰的关系

Socket 是传输控制层的接口,用户可以通过 Socket 来操作底层 TCP/IP 协议簇通信。

WebSocket 是一个完整的应用层协议。

Socket 更灵活,WebSocket 更易用。

两者都能做即时通讯

Jmeter编写的websocket脚本

websockt 脚本.jmx

YKID.csv

热门文章

  最新文章