websocket广播式实例
1、引入相关依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> </dependencies>
2、写配置类
package springboot.config; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/endpointZouHong").withSockJS(); } @Override public void configureMessageBroker(MessageBrokerRegistry registry) { registry.enableSimpleBroker("/topic"); } }
3、实体类
服务端接收类:
package springboot.bean; public class ZouhongServerMessage { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
浏览器接收类:
package springboot.bean; public class ZouhongBrowResponse { private String responseMessage; public ZouhongBrowResponse(String responseMessage) { this.responseMessage = responseMessage; } public String getResponseMessage() { return responseMessage; } public void setResponseMessage(String responseMessage) { this.responseMessage = responseMessage; } }
4、处理器
package springboot.controller; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.stereotype.Controller; import springboot.bean.ZouhongBrowResponse; import springboot.bean.ZouhongServerMessage; @Controller public class ZHController { @MessageMapping("/welcome") @SendTo("/topic/getResponse") public ZouhongBrowResponse say(ZouhongServerMessage message) throws Exception{ Thread.sleep(3000); return new ZouhongBrowResponse("welcome,"+message.getName()+"!"); } }
5、前端
<!doctype html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>SpringBoot+websocket+广播式</title> </head> <body> <noscript><h2 style="color:#ff0000">貌似你的浏览器不支持websocket</h2></noscript> <div> <div> <button id="connect" onclick="connect()">连接</button> <button id="disconnect" disabled="disabled" onclick="disconnect()">断开连接</button> </div> <div id="conversationDiv"> <label>输入你的名字</label><input type="text" id="name"> <button id="sendName" onclick="sendName()">发送</button> <p id="response"></p> </div> </div> <script th:src="@{js/jquery.js}"></script> <script th:src="@{js/stomp.min.js}"></script> <script th:src="@{js/sockjs.min.js}"></script> <script th:inline="javascript"> var stompClient=null; function setConnected(connected){ document.getElementById('connect').disabled=connected; document.getElementById('disconnect').disabled=!connected; document.getElementById('conversationDiv').style.visibility=connected?'visible':'hidden'; $("#response").html(); } function connect(){ var socket=new SockJS('/endpointZouHong'); stompClient=Stomp.over(socket); stompClient.connect({},function(frame){ setConnected(true); console.log("Connected: "+frame); stompClient.subscribe('/topic/getResponse',function(response){ showResponse(JSON.parse(response.body).responseMessage); }); }); } function disconnect(){ if(stompClient!=null){ stompClient.disconnect(); } setConnected(false); console.log("Disconnected"); } function sendName(){ var name=$("#name").val(); console.log(name); stompClient.send('/welcome',{},JSON.stringify({'name':name})); } function showResponse(message){ var response=$("#response"); response.html(message); } </script> </body> </html>
6、效果图
分类:
springboot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!