一、首先新建项目
导入jar包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--整合WebSocket--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> <version>2.1.3.RELEASE</version> </dependency>
二、目录结构
三、编写WebMvcConfig类,注意这里的ws需要与后面的html页面一直
@Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/ws").setViewName("/ws"); } }
四、编写WebSocketConfig类
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) { stompEndpointRegistry.addEndpoint("/endpointSang").withSockJS(); } @Override public void configureMessageBroker(MessageBrokerRegistry registry) { registry.enableSimpleBroker("/topic"); } }
五、构建实体类WiselyMessage
public class WiselyMessage { private String name; public String getName() { return name; } }
六、编写WiselyResponse类
public class WiselyResponse { private String responseMessage; public String getResponseMessage() { return responseMessage; } public WiselyResponse(String responseMessage) { this.responseMessage = responseMessage; } }
七、控制层WsController
@Controller public class WsController { @MessageMapping("/welcome") @SendTo("/topic/getResponse") public WiselyResponse say(WiselyMessage message) throws Exception{ Thread.sleep(3000); return new WiselyResponse("Welcome,"+message.getName()+"!"); } }
八、最后就是页面了
<html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"/> <title>广播式WebSocket</title> <script th:src="@{sockjs.min.js}"></script> <script th:src="@{jquery-2.2.3.min.js}"></script> <script th:src="@{stomp.min.js}"></script> </head> <body οnlοad="disconnect()"> <noscript><h2 style="color: #e80b0a;">Sorry,浏览器不支持WebSocket</h2></noscript> <div> <div> <button id="connect" οnclick="connect();">连接</button> <button id="disconnect" disabled="disabled" οnclick="disconnect();">断开连接</button> </div> <div id="conversationDiv"> <label>输入你的名字</label><input type="text" id="name"/> <button id="sendName" οnclick="sendName();">发送</button> <p id="response"></p> </div> </div> <script type="text/javascript"> var stompClient = null; function setConnected(connected) { debugger; document.getElementById("connect").disabled = connected; document.getElementById("disconnect").disabled = !connected; document.getElementById("conversationDiv").style.visibility = connected ? 'visible' : 'hidden'; $("#response").html(); } function connect() { debugger; var socket = new SockJS('/endpointSang'); 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() { debugger; if (stompClient != null) { stompClient.disconnect(); } setConnected(false); console.log('Disconnected'); } function sendName() { debugger; var name = $('#name').val(); console.log('name:' + name); stompClient.send("/welcome", {}, JSON.stringify({'name': name})); } function showResponse(message) { debugger; $("#response").html(message); } </script> </body> </html>
本人学习用到的,有不足之处欢迎下方留言