一、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

二、配置

1.方法一——Java EE——使用@ServerEndpoint自定义服务端

@Configuration
public class WebSocketConfig{
    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }
}
@ServerEndpoint(value = "/websocket1/{param}")
@Component
public class WebSocketServer {

    private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<>());

    @OnOpen
    public void onOpen(Session session,@PathParam("param") String param) {
        Console.log("Connection opened: " + session.getId());
        Console.log(param);
        sessions.add(session);
    }

    @OnMessage
    //服务器接收消息
    public void onMessage(String message) {
        Console.log("Received message: " + message);
    }

    @OnClose
    public void onClose(Session session) {
        Console.log("Connection closed: " + session.getId());
        sessions.remove(session);
    }

    @SneakyThrows
    public void sendToAllClient(String message) {
        for (Session session : sessions) {
            //发送消息到连接端
            session.getBasicRemote().sendText("Server received: " + message);
        }
    }
}
@RestController
public class WebSocketController {

    @Resource
    WebSocketServer webSocketServer;

    @GetMapping("/websocket")
    public void socket(@RequestParam(value = "message") String message) {
        webSocketServer.sendToAllClient(message);
    }
}


2.方法二——SpringBoot——自定义Handler、Interceptor、Config

public class MyWebSocketHandler implements WebSocketHandler {

    @Resource
    WebSocketServer webSocketServer;

    @Override
    public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception {
        //连接后处理
        webSocketServer.onOpen(webSocketSession);
    }

    @Override
    public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception {
        //处理消息
        System.out.println("客户端ID: " + webSocketSession.getId() + " 发送消息: " + webSocketMessage.getPayload());
    }

    @Override
    public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception {
		//异常处理
    }

    @Override
    public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception {
        //断开后处理
        webSocketServer.onClose(webSocketSession);
    }

    @Override
    public boolean supportsPartialMessages() {
        return false;
    }
}
public class MyWebSocketInterceptor implements HandshakeInterceptor {

    @Override
    public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
        //握手前
        ServletServerHttpRequest httpRequest =  (ServletServerHttpRequest) serverHttpRequest;
        String param = httpRequest.getServletRequest().getParameter("param");
        Console.log("param: {}",param);
        return true;
    }

    @Override
    public void afterHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Exception e) {
		//握手后
    }
}
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Bean
    public MyWebSocketHandler myWebSocketHandler() {
        return new MyWebSocketHandler();
    }

    @Bean
    public MyWebSocketInterceptor myWebSocketInterceptor(){
        return new MyWebSocketInterceptor();
    }

    @Bean
    public WebSocketServer myWebSocketServer(){
        return new WebSocketServer();
    }

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
        webSocketHandlerRegistry
                .addHandler(myWebSocketHandler(),"/websocket")
                .addInterceptors(myWebSocketInterceptor())
                .setAllowedOrigins("*");
    }
}

三、测试

ws://localhost:port/websocket  连接服务端。

localhost:port/websocket?message=  向客户端发送信息。