# WebSocket原理  
* WebSocket同HTTP一样也是应用层的协议，但是它是一种双向通信协议，是建立在TCP之上的。  
* 连接过程 —— 握手过程  

1. 浏览器、服务器建立TCP连接，三次握手。（这是通信的基础，传输控制层，若失败后续都不执行）。  
2. TCP连接成功后，浏览器通过HTTP协议向服务器传送WebSocket支持的版本号等信息。（开始前的HTTP握手）  
3. 服务器收到客户端的握手请求后，同样采用HTTP协议回馈数据。  
4. 当收到了连接成功的消息后，通过TCP通道进行传输通信。  

# WebSocket与HTTP的关系    
## 相同点  

1. 都是一样基于TCP的，都是可靠性传输协议。  
2. 都是应用层协议。  

## 不同点  

1. WebSocket是双向通信协议，模拟Socket协议，可以双向发送或接受信息。HTTP是单向的。  
2. WebSocket是需要握手进行建立连接的。  

## 联系  
WebSocket在建立握手时，数据是通过HTTP传输的。但是建立之后，在真正传输时候是不需要HTTP协议的。  

# 添加Jmeter对WebSocket协议的支持插件  
首先，我们需要准备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](https://gitlab.33.cn/flyaway53/test/raw/master/img-folder/%E5%88%98%E9%94%90/%E5%9B%BE%E7%89%871.png)  
![图片2](https://gitlab.33.cn/flyaway53/test/raw/master/img-folder/%E5%88%98%E9%94%90/%E5%9B%BE%E7%89%872.png)

# 聊天室项目WebSocket接口测试  
## 普及知识  
1. cookie：  
网站中，http请求是无状态的，即使第一次和服务器连接后并且登录成功后，第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题，第一次登录后服务器返回一些数据（cookie）给浏览器，然后浏览器保存在本地，当该用户发送第二次请求的时候，就会自动的把上次请求存储的cookie数据自动的携带给服务器，服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限，但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
2. session:  
session和cookie的作用有点类似，都是为了存储用户相关的信息。不同的是session存储在服务器。存储在服务器的数据会更加的安全，不容易被窃取，弊端就是会占用服务器的资源。  
![图片3](https://gitlab.33.cn/flyaway53/test/raw/master/img-folder/%E5%88%98%E9%94%90/%E5%9B%BE%E7%89%873.png)  
![图片9](https://gitlab.33.cn/flyaway53/test/raw/master/img-folder/%E5%88%98%E9%94%90/%E5%9B%BE%E7%89%879.png)
![图片4](https://gitlab.33.cn/flyaway53/test/raw/master/img-folder/%E5%88%98%E9%94%90/%E5%9B%BE%E7%89%874.png)  
![图片5](https://gitlab.33.cn/flyaway53/test/raw/master/img-folder/%E5%88%98%E9%94%90/%E5%9B%BE%E7%89%875.png)
![图片6](https://gitlab.33.cn/flyaway53/test/raw/master/img-folder/%E5%88%98%E9%94%90/%E5%9B%BE%E7%89%876.png)  
![图片7](https://gitlab.33.cn/flyaway53/test/raw/master/img-folder/%E5%88%98%E9%94%90/%E5%9B%BE%E7%89%877.png)
![图片8](https://gitlab.33.cn/flyaway53/test/raw/master/img-folder/%E5%88%98%E9%94%90/%E5%9B%BE%E7%89%878.png)