loadrunner下websocket协议性能测试(一)
前言
写这个系列主要是分享websocket的性能测试脚本怎么写,所以性能测试的前后过程就不再赘述了。
一、websocket协议简介
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
在 WebSocket API 中,客户端和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
二、websocket握手过程
客户端开始建立WebSocket连接时要发送一个header标记了 Upgrade的HTTP请求,表示请求协议升级http协议为WebSocket协议,服务端返回个状态码为101的HTTP响应完成握手,标识协议已升级为websocket
client发送升级协议报文
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Connection: Upgrade
Host: 127.0.0.1:8080
Origin: http://www.jsons.cn
Pragma: no-cache
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: wsD6d4m837Jv0lZBa5WnyQ==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Upgrade: websocket
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36
报文中与常规http请求不同的头信息解读:
Connection: 告诉服务器我要升级协议
Upgrade: 告诉服务器升级的协议为websocket
Sec-WebSocket-Extensions: 为扩展说明
Sec-WebSocket-Key: 是 WebSocket 客户端发送的一个 base64 编码的密文,要求 服务端必须返回 一个对应加密的"Sec-WebSocket-Accept"应答,否则客户端会抛出"Error during WebSocket handshake"错误,并关闭连接
Sec-WebSocket-Protocol: 是用于标识客户端想和服务端使用哪一种子协议(都是应用层的协议,比如 chat 表示采用 “聊天” 这个应用层协议)。
服务端对于升级的响应报文示例:
HTTP/1.1 101 Switching Protocols
connection: Upgrade
content-length: 0
date: Tue, 23 Nov 2021 17:03:02 GMT
sec-websocket-accept: DRHSVzEpXn+9gcXFfIL0vnuJu9A=
Sec-WebSocket-Protocol: chat
upgrade: WebSocket
简单解读头信息:
code 101:标识协议升级成功
sec-websocket-accept:根据客户端发送的Sec-WebSocket-Key返回的加密应答
Sec-WebSocket-Protocol:使用子协议为chat
connection: Upgrade和upgrade: WebSocket表示升级协议为websocket
注:loadrunner11中使用socket协议编写脚本,在tcp通道创建完成后发送的第一个报文就是这个,意为告诉服务器后续通讯所使用的协议
websocket 客户端与服务端通讯过程简要图: