diff --git a/docs/.vitepress/theme/router/index.ts b/docs/.vitepress/theme/router/index.ts
index c0683c2..9d0c97f 100644
--- a/docs/.vitepress/theme/router/index.ts
+++ b/docs/.vitepress/theme/router/index.ts
@@ -22,8 +22,8 @@ export const routers = [
items: [
{ text: 'Spring IOC简介', link: '/Web/SpringBoot/Spring-IOC' },
{ text: 'Spring AOP简介', link: '/Web/SpringBoot/Spring-AOP' },
- { text: 'SpringBoot启动流程', link: '/Web/SpringBoot/SpringBoot-Start-Process' },
{ text: 'Spring MVC简介', link: '/Web/SpringBoot/Spring-MVC' },
+ { text: 'SpringBoot启动流程', link: '/Web/SpringBoot/SpringBoot-Start-Process' },
{ text: 'SpringBoot Starter原理', link: '/Web/SpringBoot/SpringBoot-Starter' },
{ text: 'SpringBoot Bean简介', link: '/Web/SpringBoot/SpringBoot-Bean' },
{ text: 'SpringBoot注解', link: '/Web/SpringBoot/SpringBoot-Annotation' },
@@ -31,6 +31,7 @@ export const routers = [
{ text: 'SpringBoot技巧', link: '/Web/SpringBoot/SpringBoot-Skills' },
{ text: 'SpringBoot RestClient简介', link: '/Web/SpringBoot/SpringBoot-RestClient' },
{ text: 'SpringBoot Redis简介和使用', link: '/Web/SpringBoot/SpringBoot-Redis' },
+ { text: 'SpringBoot WebSocket使用', link: '/Web/SpringBoot/SpringBoot-WebSocket' },
{ text: 'SpringBoot 线程与事件', link: '/Web/SpringBoot/SpringBoot-Thread' }
]
},
diff --git a/docs/Web/SpringBoot/Spring-AOP.md b/docs/Web/SpringBoot/Spring-AOP.md
index 0c5da59..0d3470b 100644
--- a/docs/Web/SpringBoot/Spring-AOP.md
+++ b/docs/Web/SpringBoot/Spring-AOP.md
@@ -22,7 +22,8 @@
| 后置通知(After) | 目标方法执行后执行(无论是否抛出异常) |
| 返回通知(AfterReturning) | 目标方法正常返回后执行 |
| 异常通知(AfterThrowing) | 目标方法抛出异常后执行 |
-| 环绕通知(Around) | 包裹目标方法执行,可自定义目标方法执行前后的逻辑(功能最强) |
+| 环绕通知(Around) | 包裹目标方法执行,可自定义目标方法执行前后的逻辑(功能最强) |
+ [AOP API](https://docs.springjava.cn/spring-framework/reference/core/aop-api.html)
# 二、原理
Spring AOP 基于动态代理实现,分为两种方式:
diff --git a/docs/Web/SpringBoot/Spring-IOC.md b/docs/Web/SpringBoot/Spring-IOC.md
index dfd9ea3..2707d75 100644
--- a/docs/Web/SpringBoot/Spring-IOC.md
+++ b/docs/Web/SpringBoot/Spring-IOC.md
@@ -4,7 +4,8 @@
---
# 一、IOC
- Spring框架的核心是IOC(控制反转)容器,它负责管理应用程序中的对象(称为Bean)的创建、配置和组装。
+ Spring框架的核心是IOC(控制反转)容器,它负责管理应用程序中的对象(称为Bean)的创建、配置和组装。
+ [IoC 容器](https://docs.springjava.cn/spring-framework/reference/core/beans.html)
# 二、Bean
## 2.1 定义
diff --git a/docs/Web/SpringBoot/Spring-MVC.md b/docs/Web/SpringBoot/Spring-MVC.md
index be330dc..73145d6 100644
--- a/docs/Web/SpringBoot/Spring-MVC.md
+++ b/docs/Web/SpringBoot/Spring-MVC.md
@@ -4,7 +4,8 @@
---
# 一、基础概念
- Spring MVC(Spring Model-View-Controller)是 Spring Framework 中的一部分,它是一个基于 **请求驱动** 的 Web 框架,主要用于构建 Web 应用程序,并且遵循 MVC(模型-视图-控制器) 设计模式。它将 Web 应用的业务逻辑、用户界面和请求处理分离,使得代码更加模块化和可维护。
+ Spring MVC(Spring Model-View-Controller)是 Spring Framework 中的一部分,它是一个基于 **请求驱动** 的 Web 框架,主要用于构建 Web 应用程序,并且遵循 MVC(模型-视图-控制器) 设计模式。它将 Web 应用的业务逻辑、用户界面和请求处理分离,使得代码更加模块化和可维护。
+ [Spring Web MVC](https://docs.springjava.cn/spring-framework/reference/web/webmvc.html)
# 二、具体流程

diff --git a/docs/Web/SpringBoot/SpringBoot-WebSocket.md b/docs/Web/SpringBoot/SpringBoot-WebSocket.md
new file mode 100644
index 0000000..10499f8
--- /dev/null
+++ b/docs/Web/SpringBoot/SpringBoot-WebSocket.md
@@ -0,0 +1,154 @@
+---
+ title: SpringBoot WebSocket使用
+ date: 2026-06-08
+---
+
+# 一、简介
+ [WebSocket API](https://docs.springjava.cn/spring-framework/reference/web/websocket/server.html)
+
+# 二、安装
+```xml
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+```
+
+# 三、使用
+## 3.1 定义WebSocketHandler
+```java
+@Component
+public class GenericWebSocketHandler extends TextWebSocketHandler {
+ private static final Map SESSION_MAP =
+ new ConcurrentHashMap<>();
+
+ @Override
+ public void afterConnectionEstablished(WebSocketSession session) {
+ String userId = getUserId(session);
+ SESSION_MAP.put(userId, session);
+ log("用户连接成功:" + userId);
+ }
+
+ @Override
+ public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
+ String userId = getUserId(session);
+ SESSION_MAP.remove(userId);
+ log("用户断开连接:" + userId);
+ }
+
+ @Override
+ protected void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {
+ String payload = message.getPayload();
+
+ // 心跳处理
+ if ("PING".equalsIgnoreCase(payload)) {
+ session.sendMessage(new TextMessage("PONG"));
+ return;
+ }
+
+ // 普通消息(可按 JSON 协议扩展)
+ log("收到消息:" + payload);
+ session.sendMessage(new TextMessage("服务端已收到:" + payload));
+ }
+
+ @Override
+ public void handleTransportError(WebSocketSession session, Throwable exception) {
+ log("传输异常:" + exception.getMessage());
+ }
+
+ /** 从 session 中获取用户标识(握手阶段放入) */
+ private String getUserId(WebSocketSession session) {
+ return (String) session.getAttributes().getOrDefault("userId", session.getId());
+ }
+
+ /** 单发 */
+ public void sendToUser(String userId, String msg) throws IOException {
+ WebSocketSession session = SESSION_MAP.get(userId);
+ if (session != null && session.isOpen()) {
+ session.sendMessage(new TextMessage(msg));
+ }
+ }
+
+ /** 广播 */
+ public void broadcast(String msg) throws IOException {
+ for (WebSocketSession session : SESSION_MAP.values()) {
+ if (session.isOpen()) {
+ session.sendMessage(new TextMessage(msg));
+ }
+ }
+ }
+
+ /** 在线人数 */
+ public int onlineCount() {
+ return SESSION_MAP.size();
+ }
+}
+```
+
+## 3.2 定义HandshakeInterceptor
+```java
+@Component
+public class GenericHandshakeInterceptor implements HandshakeInterceptor {
+
+ /**
+ * 握手前执行
+ */
+ @Override
+ public boolean beforeHandshake(
+ ServerHttpRequest request,
+ ServerHttpResponse response,
+ WebSocketHandler wsHandler,
+ Map attributes) {
+ // 从请求中URL中获取id
+ // 例如:ws://localhost:8080/ws?userId=123,多个参数用&连接
+ String userId = servletRequest.getServletRequest().getParameter("userId");
+
+ if (userId == null) {
+ // 返回 false → 握手失败 → 连接被拒绝
+ return false;
+ }
+
+ // 放入 attributes 中,方便下次获取
+ attributes.put("userId", userId);
+
+ return true;
+ }
+
+ /**
+ * 握手完成后执行(一般不用写)
+ */
+ @Override
+ public void afterHandshake(
+ ServerHttpRequest request,
+ ServerHttpResponse response,
+ WebSocketHandler wsHandler,
+ Exception exception) {
+ }
+}
+```
+
+## 3.3 配置WebSocketConfigurer
+```java
+@Configuration
+@EnableWebSocket
+public class WebSocketConfig implements WebSocketConfigurer {
+
+ @Resource
+ private GenericWebSocketHandler genericWebSocketHandler;
+
+ @Resource
+ private GenericHandshakeInterceptor genericHandshakeInterceptor;
+
+ @Override
+ public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
+ registry.addHandler(genericWebSocketHandler, "/ws")
+ .addInterceptors(genericHandshakeInterceptor)
+ .setAllowedOrigins("*");
+ }
+}
+```
+
+ WebSocket连接地址:ip:port/ws?userId=123。
+
+# 四、前端使用
+ 参考:[useWebSocket](../Vue/VueUse.md)
\ No newline at end of file