在 Spring Boot 中实现 WebSocket 服务并让客户端实时接收消息,可以使用 Spring Boot 内置的 WebSocket 支持。下面我为你提供一个基于 Spring Boot 和 WebSocket 的完整 Demo。
1. 引入依赖
首先,在
pom.xml
中添加 WebSocket 的依赖:
<dependencies><!-- WebSocket 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency></dependencies>
2. WebSocket 配置
创建一个配置类
WebSocketConfig.java
,用于配置 WebSocket 的端点和处理逻辑。
importorg.springframework.context.annotation.Configuration;importorg.springframework.web.socket.config.annotation.EnableWebSocket;importorg.springframework.web.socket.config.annotation.WebSocketConfigurer;importorg.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;@Configuration@EnableWebSocketpublicclassWebSocketConfigimplementsWebSocketConfigurer{@OverridepublicvoidregisterWebSocketHandlers(WebSocketHandlerRegistry registry){// 注册 WebSocket 处理器和端点
registry.addHandler(newWebSocketHandler(),"/websocket").setAllowedOrigins("*");// 允许跨域}}
3. WebSocket 处理器
创建
WebSocketHandler.java
,处理 WebSocket 的连接、消息接收、消息广播等操作。
importorg.springframework.web.socket.CloseStatus;importorg.springframework.web.socket.TextMessage;importorg.springframework.web.socket.WebSocketSession;importorg.springframework.web.socket.handler.TextWebSocketHandler;importjava.util.HashSet;importjava.util.Set;publicclassWebSocketHandlerextendsTextWebSocketHandler{// 用于保存所有连接的 WebSocket 会话privatestaticfinalSet<WebSocketSession> sessions =newHashSet<>();// 当有客户端连接时调用@OverridepublicvoidafterConnectionEstablished(WebSocketSession session)throwsException{
sessions.add(session);
session.sendMessage(newTextMessage("欢迎连接 WebSocket 服务器!"));}// 当有消息从客户端发送过来时调用@OverrideprotectedvoidhandleTextMessage(WebSocketSession session,TextMessage message)throwsException{System.out.println("收到客户端消息: "+ message.getPayload());}// 当连接关闭时调用@OverridepublicvoidafterConnectionClosed(WebSocketSession session,CloseStatus status)throwsException{
sessions.remove(session);}// 广播消息给所有连接的客户端publicstaticvoidbroadcast(String message)throwsException{for(WebSocketSession session : sessions){if(session.isOpen()){
session.sendMessage(newTextMessage(message));}}}}
4. 模拟公告推送
创建一个控制器
AnnouncementController.java
,模拟公告的发布功能。发布公告时,会调用 WebSocket 处理器的
broadcast
方法,将消息推送给所有已连接的客户端。
importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassAnnouncementController{@GetMapping("/announce")publicStringsendAnnouncement(){try{// 模拟公告内容String announcement ="新公告发布于: "+System.currentTimeMillis();WebSocketHandler.broadcast(announcement);return"公告已发布: "+ announcement;}catch(Exception e){
e.printStackTrace();return"发布失败";}}}
5. 运行步骤
1. 启动 Spring Boot 应用
启动 Spring Boot 项目后,WebSocket 服务器将会在
/websocket
端点上监听。
2. 小程序或网页客户端
客户端可以是小程序或者网页。这里提供一个简单的 HTML 客户端来测试 WebSocket 连接。
HTML 客户端代码(用于测试 WebSocket 连接):
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>WebSocket Demo</title></head><body><h1>WebSocket Demo</h1><divid="messages"></div><script>// 连接 WebSocket 服务器var socket =newWebSocket("ws://localhost:8080/websocket");
socket.onopen=function(){
console.log("连接成功!");};
socket.onmessage=function(event){
console.log("收到消息:", event.data);
document.getElementById("messages").innerHTML +="<p>"+ event.data +"</p>";};
socket.onclose=function(){
console.log("连接关闭!");};</script></body></html>
3. 发布公告
使用浏览器访问
http://localhost:8080/announce
,每次访问该地址时,服务器会推送一条公告消息给所有连接的 WebSocket 客户端。
6. 小程序端实现
你也可以在微信小程序中使用类似的方式,通过 WebSocket 接收服务器推送的公告。
Page({
data:{
messages:[]// 保存接收到的公告消息},onLoad:function(){// 连接 WebSocket 服务器
wx.connectSocket({
url:'ws://localhost:8080/websocket',// 注意修改为你的服务器地址success:(res)=>{
console.log('WebSocket 连接成功!');},fail:(err)=>{
console.error('WebSocket 连接失败', err);}});// 监听 WebSocket 消息
wx.onSocketMessage((res)=>{
console.log('收到服务器消息:', res.data);this.setData({
messages:[...this.data.messages, res.data]// 将新消息添加到列表中});});// 监听 WebSocket 连接关闭
wx.onSocketClose((res)=>{
console.log('WebSocket 已关闭', res);});}});
7. 总结
- 通过 Spring Boot 的 WebSocket 支持,可以在服务器端推送实时公告。
- 客户端可以是 HTML 页面,也可以是微信小程序,使用 WebSocket 接口接收公告消息。
版权归原作者 m0_74825409 所有, 如有侵权,请联系我们删除。