首页 > 技术文章 > websocket协议

jingdenghuakai 2020-06-24 16:24 原文

WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。
浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此WebSocket 协议中,为我们实现即时服务带来了两大好处:
1. Header  互相沟通的Header是很小的-大概只有 2 Bytes
2. Server Push

首先,我们需要准备Jmeter的WebSocket协议的支持插件:
JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar
这插件依赖一下几个jar包
1、jetty-http-9.1.2.v20140210.jar
2、jetty-io-9.1.2.v20140210.jar
3、jetty-util-9.1.2.v20140210.jar
4、websocket-api-9.1.1.v20140108.jar
5、websocket-client-9.1.1.v20140108.jar
6、websocket-common-9.1.1.v20140108.jar
我们准备好这些jar包后,讲它们拷贝到Jmeter目录的\lib\ext\目录下

在取样器中就可以找到协议


1)Server Name or IP:部署WebSocket应用所在的服务器地址
2)Port Number:端口号
3)Timeout:Connection,连接超时,超过此时间未建立连接则测试报错;Response,发送消息后的超时时间。
4)Implementation:现在只支持RFC6455
5)Protocol:ws或者wss。wss指的是加密的web socket,根据被测的配置而定
6)Path:所部署WebSocket服务的路径
7)Streaming connection:测试期间是否重用连接,如果处于非选中状态,每次得到服务器端的返回后就会关闭连接,下次执行时会新建连接(选择这个TCP session要不要保持,如果勾上标识连接会一直存在,如果没有勾上,那么得到第一次响应后该链接就会被关闭

8)Request Data:发送出去的数据
9)Response pattern:采样器将等待含有该标识的消息并继续通信(或者直到timeout,该连接关闭)
10)Close Connection Pattern:如果服务器返回的消息含有这样的字符,就结束会话
11)Message Backlog:定义最多留下的返回消息的数目(定义服务器返回消息保留的最大长度)

 

 

 

 

 

 


在Jmeter目录的\lib\ext\目录下添加jar包,就可以在取样器中找到以下协议。

1、代表协议类型,ws对应http,wss对应https;
2、请求服务器名称,从抓包结果可以获得;
3、请求端口号,从抓包结果可以获得;
4、请求路径,从抓包结果可以获得;
5、连接5S后未连上超时,可以自己设置;
6、请求数据,从抓包结果可以获得;;
7、响应6S后未成功超时,可以自己设置;
8、创建新的连接
9、使用已有连接,即上一个websocket就是上一个websocket请求所建立的连接通道

 

建立连接(WebSocket Open Connection)
如果仅建立连接,不发送数据,不需要返回数据,用WebSocket Open Connection
连接+发送data或者只发data(WebSocket request-response Sampler)
如果建立连接时,还需要发送或用到返回数据,则用 WebSocket request-response Sampler。
心跳机制(Ping/Pong)
根据需求使用,心跳机制,检查连接是否还存在。请求头带编码,告诉WebSocket服务,这是心跳,所以不用填写任何东西,可以直接使用
心跳机制
  维护任何一个长连接都需要心跳机制,客户端发送一个心跳给服务器,服务器给客户端一个心跳应答,这样就形成客户端服务器的一次完整的握手,这个握手是让双方都知道他们之间的连接是没有断开,客户端是在线的
  如果超过一个时间的阈值,客户端没有收到服务器的应答,或者服务器没有收到客户端的心跳,那么对客户端来说则断开与服务器的连接重新建立一个连接,对服务器来说只要断开这个连接即可
发送方->接收方:ping;
接收方->发送方:pong
Ping和Pong是websocket里的心跳,用来保证客户端是在线的,一般来说只有服务端给客户端发送Ping,然后客户端发送Pong来回应,表明自己仍然在线。


cps=(目标带宽kbps*1024)/8
比如:想模拟GRPS网络时(下行为171Kbit/s),cps值为21888
在user.properties中添加上面两句并设置大小即可

 

推荐阅读