文章目录 概述 什么是WebSocket? WebSocket是如何工作的? JAVA WebSocket Springboot服务端实现 新建SpringBoot工程 配置WebSocket 发布服务 测试
概述 WebSocket是web客户端和服务器之间新的通讯方式, 依然架构在HTTP协议之上。使用WebSocket连接, web应用程序可以执行实时的交互, 而不是以前的poll方式。
WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议,可以用来创建快速的更大规模的健壮的高性能实时的web应用程序。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
什么是WebSocket? 一个WebSocket是通过一个独立的TCP连接实现的、异步的、双向的、全双工的消息传递实现机制。WebSockets不是一个HTTP连接,却使用HTTP来引导一个WebSocket连接。一个全双工的系统允许同时进行双向的通讯。有线线路电话是一个全双工设施的例子,因为它们允许两个通话者同时讲话并被对方听到。
WebSocket协议利用HTTP升级头信息来把一个HTTP连接升级为一个WebSocket连接。HTML5 WebSockets 解决了许多导致HTTP不适合于实时应用的问题,并且它通过避免复杂的工作方式使得应用结构很简单。
目前绝大多数的浏览器都支持WebSocket
WebSocket是如何工作的? 每一个WebSocket连接的生命都是从一个HTTP请求开始的。HTTP请求跟其他请求很类似,除了它拥有一个Upgrade头信息。Upgrade头信息表示一个客户端希望把连接升级为不同的协议。对WebSockets来说,它希望升级为WebSocket协议。当客户端和服务器通过底层连接第一次握手时,WebSocket连接通过把HTTP协议转换升级为WebSockets协议而得以建立。一旦WebSocket连接成功建立,消息就可以在客户端和服务器之间进行双向发送
而websocket请求和服务器交互的如下图所示:
由上图可知,websocket只要建立连接,之后客户端与服务器的通讯完全是自由的,客户端可以主动发送消息,同理服务端也可以主动进行消息推送。而http请求只能一个request对应一个response,所以服务端不能做到真正意义上的主动发送消息。而且连接建立起后只需要通过数据帧来进行传输,帧的头部信息远比http当中的head小多了,会节省大量的带宽。更适合做长时间的数据传输。但其缺点就是需要一直维持连接,因此对于服务器的端口资源消耗较大。
WebSockets优点: WebSockets比其它工作方式比如轮询更有效也更高效。因为它需要更少的带宽并且降低了延时。 WebSockets简化了实时应用的结构体系。 WebSockets在点到点发送消息时不需要头信息。这显著的降低了带宽。
WebSockets使用案例: 聊天应用 多人游戏 股票交易和金融应用 文档合作编辑 社交应用
最近有一个聊天系统的项目需要性能测试,既然是测试聊天,肯定绕不开websocket接口的测试,首选工具是Jmeter,网上能搜到现成的方法,但是网上提供的jar包往往不是最新的,既然是用最新版本的Jmeter4.0,那么所依赖的插件jar包也应该追求新的。所以提供了以下链接供大家下载(甚至连源码都提供):
(1)Jmeter工具
(2)websocket请求模板 JMeterWebSocketSamplers
(3)jetty-http
(4)jetty-io
(5)jetty-util
(6)websocket-api
(7)websocket-client
(8)websocket-common
将(2)~(4)中下载的jar包放到Jmeter以下目录下,就能够被调用了:
#将你下载的所有jar包,复制到该目录下:
apache-jmeter-4.0\lib\ext
一、启动JMeter
windows环境打开 bin下的jmeter.bat
linux环境打开bin下的jmeter.sh
由于Jmeter4.0的界面是深色的(看不清字体),默认语言是英语,我们可以调一下。先修改语言:在bin\jmeter.properties中找到#language=en,将前面的注释【#】去掉,改为language=zh_CN。这样启动后就是中文版的,然后到选项-->外观中选择Metal,这就变成传统Jmeter样式。
二、添加websocket Sampler
先在测试计划中添加线程组,然后右键添Sampler时就能看到websocket的模板:
常用的就是websocket request-response Sampler(连接+发送data或者只发data),其次是WebSocket Open Connection(只连接,不发送data)
配置举例如下:
说明:(1)Connection:有两项,第一项是使用已有连接,就是上一个websocket请求所建立的连接通道,选择后Server URL全置灰只读不可操作。第二项是新建连接通道。
(2)Server URL:可以发送ws协议和wss协议(加密的websocket),以上图的配置所对应的连接串如下:
ws://192.18.24.211:8888/testPath (这一点比旧版本的websocket插件配置要清晰明了)
(3)Data:支持文本(包括JSON)和Binary二进制数据的发送。默认请求响应的超时时间为6S,超过这个时间报错。(对于Data的文本格式最好是自己抓包获取,比如谷歌浏览器的F12开发者工具或Fiddler,不要太相信开发提供的接口文档)