websocket推送消息
时间: 2025-04-28 22:26:58 浏览: 22
### WebSocket 实现服务器向客户端推送消息
#### 一、WebSocket 协议简介
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。相比传统的 HTTP 请求-响应模式,WebSocket 允许服务端主动向客户端推送数据,这极大地简化了实时应用开发中的双向通信需求[^3]。
#### 二、基于 Spring Boot 的 WebSocket 推送实现方式
为了使服务器能够向特定客户端发送消息,在 Spring Boot 应用程序中可以采用如下方法:
1. **建立连接并保存会话**
当客户端首次发起 WebSocket 握手请求时,服务器端需捕获该事件并将对应的 `Session` 存储起来以便后续调用。通常情况下,可以通过重写 `afterConnectionEstablished()` 方法来完成这项工作。
2. **定义消息处理逻辑**
使用 `@MessageMapping` 注解标注用于接收来自前端的消息的方法;而对于要推送给用户的指令,则可以直接操作之前存储好的 Session 对象或者利用 SimpMessagingTemplate 工具类来进行广播/定向通知。
3. **编写具体业务代码**
```java
// 导入必要的包...
@Component
public class MyWebSocketHandler extends TextWebSocketHandler {
private final Map<String, WebSocketSession> sessions = new ConcurrentHashMap<>();
@Override
protected void afterConnectionEstablished(WebSocketSession session) throws Exception {
String userId = (String)session.getAttributes().get("userId");
this.sessions.put(userId, session);
super.afterConnectionEstablished(session);
}
public void sendMessageToUser(String userId, String message){
WebSocketSession session = this.sessions.get(userId);
if(null != session && session.isOpen()){
session.sendMessage(new TextMessage(message));
}
}
}
```
此段 Java 代码展示了如何在一个简单的 Spring Boot 应用里管理多个用户的 WebSocket Sessions 并提供了一个名为 `sendMessageToUser` 的函数用来给指定 ID 用户发送自定义文本信息[^5]。
另外值得注意的是,除了直接操控底层 API 外,还可以借助于 STOMP over WebSocket 技术栈进一步抽象化这套机制,从而让开发者更专注于构建高层次的应用特性而非纠结于网络层细节之上。
对于非 Spring 生态圈内的项目而言,比如使用 Netty 构建的服务端应用程序也可以轻松达成同样的功能——只需按照官方文档说明设置好相应的路由规则以及监听回调即可[^4]。
阅读全文
相关推荐



















