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