【笔记】WebSocket学习笔记

前言

WebSocket学习笔记

WebSocket协议请求头和响应头

升级请求

  • 将请求从HTTP协议升级到WebSocket协议

请求头

1
2
3
4
5
6
7
GET ws://localhost HTTP/1.1
Host: localhost
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: xxxxxxxxxxxxxxxxxxxxxx==
Sec-WebSocket-Extensions: permessage-deflate
Sec-WebSocket-Version: 13

响应头

101:101响应码表示升级协议成功

1
2
3
4
5
HTTP/1.1 101 Seitching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: xxxxxxxxxxxxxxxxxxxxxx==
Sec-WebSocket-Extensions: permessage-deflate

客户端

创建WebSocket对象

<url>:ws协议的服务端地址(以ws://开头)

1
const ws = new WebSocket(<url>);

发送数据给服务端

1
ws.send();

WebSocket对象的事件

连接建立时

1
2
3
ws.addEventListener("open", function (event) {
...
});

接收到数据时

  • 客户端接收服务端发送的数据时
1
2
3
ws.addEventListener("message", function (event) {
console.log(event.data);
});

发生错误时

1
2
3
ws.addEventListener("error", function (event) {
...
});

连接关闭时

1
2
3
ws.addEventListener("close", function (event) {
...
});

服务端

Java

引入依赖

pom.xml
1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

面向注解

  • 定义一个POJO类
  • 通过@OnMessage标注的方法处理接收消息
  • 通过session对象中的getBasicRemote()方法发送消息

@ServerEndpoint("/"):指定请求的资源路径

src/main/java/pojo/MsgEndPoint.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@ServerEndpoint("/")
public class MsgEndPoint {

private Session session

// 客户端接收服务端消息时执行
@OnMessage
public void onMessage(String message, Session session) throws IOException {
// 接收消息
System.out.println(message);
// 发送消息
session.getBasicRemote().sendText("");
}

// 会话创建时执行
@OnOpen
public void onOpen(Session session) {
this.session = session;
}

// 会话结束时执行
@OnClose
public void onClose(Session session) {

}

// 会话报错时执行
@OnError
public void onError(Session session, Throwalbe error) {

}

}

完成

参考文献

哔哩哔哩——黑马程序员西安中心
Mozilla官方文档