目录
一、WebSocket简介
二、JMeter测试WebSocket接口
三、WebSocket和Socket的区别
最近老被问到WebSocket,突然想到以前大学时上Java课的时候,老师教我们socket连接,一个同学电脑做客户端,一个同学电脑做服务端,当双方消息发送成功,第一次感觉到代码的奇妙~
毕竟抄代码都不利索,哈哈哈哈哈~
接下来将如何测试WebSocket接口总结下来。
一、WebSocket简介
WebSocket是一种网络通信协议,客户端和服务端只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
我们常见的协议是HTTP和HTTPS协议,客户端向服务端发起请求,服务端向客户端返回响应,完成一次请求响应之后就会断开连接。对于金融证券的实时信息、社交网络的实时消息推送、网络直播等需要实时传输数据的情况下,HTTP并不能很好的满足。
HTTP需要客户端向服务端发起请求;WebSocket服务端可以主动向客户端推送信息,客户端也可以主动向服务器发送信息。
一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。
二、JMeter测试WebSocket接口
1、安装WebSocket插件
选项 > Plugins Manager 输入WebSocket,勾选对应插件,点击Apply Changes and Restart JMeter。
该插件包含websocket-api.jar、websocket-common.jar、websocket-client.jar、jetty-http.jar、jetty-io.jar、jetty-util.jar等JAR包。
2、WebSocket相关的取样器
- websocket close 用于正常关闭websocket连接;
- websocket open connection 用于显式设置websocket连接;
- websocket ping-pong 用于发送ping和接收 pong请求;
- websocket sampler 用于执行基本的请求-响应请求;
- websocket single read sampler 用于接收一个文本或二进制的websocket请求;
- websocket single write sampler 用于发送一个文本或二进制的websocket请求;
3、构建一个WebSocket接口
一般我们在网上看到的大多HTTP接口,为了方便验证,我从网上找一段Java实现WebSocket实时通讯代码,代码已经放到https://gitee.com/weimenghua/Learn-Java,运行JavaWebApplication即可启动项目,项目启动后即可进行测试。
客户端发送内容:http://127.0.0.1:63342/Learn-Java/Java-Web/com/wmh/view/socket.html。
服务端发送内容:http://127.0.0.1:9999/wbtest/sendMsg/test_websocket。
4、进行websocket接口测试
选中“线程组”右键 > 添加 > 取样器 > WebSocket Open Connection。
建立WebSocket连接:ws://127.0.0.1:9999/websocket/demo。
选中“线程组”右键 > 添加 > 取样器 > WebSocket Sampler。
发起WebSocket请求:ws://127.0.0.1:9999/wbtest/sendMsg/test_websocket。
- Server Name or IP:发送请求的目标服务器的IP地址或者域名。
- Port Number:服务器地址后的端口号,有则填写,没有不用填写。
- Protocol [ws/wss]:ws是明文数据传输,wss是密文数据传输,相当于http和https的差别,默认ws。
- Path:接口路径。
- Request data:发送的请求数据。
我们可以再控制台看到服务端发送内容。
若需在请求完成之后关闭WebSocket连接,可添加WebScoket Close取样器。
相关脚本已放到gitee:https://gitee.com/weimenghua/wei-notebook/blob/master/JMeter/JMeter.jmx
三、WebSocket和Socket的区别
1、socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。
2、WebSocket协议是基于TCP的一种新的网络协议,和http协议一样属于应用层协议,是一种让客户端和服务器之间能进行双向实时通信的技术。
https://www.processon.com/view/link/615eae81e0b34d06f3dcdf4b