在 Spring Boot 中,WebSocket 是一种非常有用的通信协议。WebSocket 可以使客户端和服务器之间实现双向通信,而不是传统的单向 HTTP 请求和响应。本文将介绍在 Spring Boot 中如何使用 WebSocket。
在 pom.xml 文件中添加以下依赖:
org.springframework.boot spring-boot-starter-websocket
创建一个 WebSocketConfig 类,在类上加上 @Configuration 和 @EnableWebSocket 注解。在类中添加一个方法,返回一个 WebSocketHandler 对象。
@Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/myHandler").setAllowedOrigins("*"); } @Bean public WebSocketHandler myHandler() { return new MyHandler(); } }
其中,/myHandler 是 WebSocket 的端点,MyHandler 是具体的处理类,setAllowedOrigins(“*”) 表示允许跨域请求。
创建一个 MyHandler 类实现 WebSocketHandler 接口,并重写其中的方法。具体实现可以根据业务需求来进行定制。
public class MyHandler implements WebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // 连接建立后的操作 } @Override public void handleMessage(WebSocketSession session, WebSocketMessage> message) throws Exception { // 处理收到的消息 } @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { // 处理传输错误 } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { // 连接关闭后的操作 } @Override public boolean supportsPartialMessages() { return false; } }
在前端页面中,可以使用 JavaScript 的 WebSocket 对象实现与服务器的通信。例如:
var socket = new WebSocket("ws://localhost:8080/myHandler"); socket.onopen = function(event) { // 连接建立后的操作 }; socket.onmessage = function(event) { // 处理收到的消息 }; socket.onclose = function(event) { // 连接关闭后的操作 }; socket.send("hello world");
运行 Spring Boot 应用程序,并通过浏览器访问前端页面。在控制台中可以看到 WebSocket 连接的日志信息。可以使用 JavaScript 发送消息,也可以在 MyHandler 中主动发送消息。
session.sendMessage(new TextMessage("hello world"));
总结:
Spring Boot 提供了非常方便的操作 WebSocket 的方式,使得我们可以快速地实现双向通信功能。在实际开发中,可以根据具体业务需求来定制 WebSocket 的处理类。