在现代的 web 应用开发中,WebSocket 提供了一种在客户端和服务器之间进行全双工通信的方式,非常适合实时应用程序。Spring Boot 作为一个流行的框架,提供了非常便利的 WebSocket 支持。本文将详细介绍如何在 Spring Boot 中搭建一个 WebSocket 服务端,并演示如何通过 URL 传递参数连接。

一、搭建环境

确保你的开发环境中已经安装了以下工具: - JDK 11 或更高版本 - Maven - IDE(如 IntelliJ IDEA 或 Eclipse)

二、创建 Spring Boot 项目

  1. 创建项目目录

使用 Spring Initializr(https://start.spring.io/)创建一个新的 Spring Boot 项目,选择依赖项为 WebWebSocket

  1. 导入项目

将下载的项目导入到你的 IDE 中。

三、编写 WebSocket 配置

在项目中创建一个 WebSocket 配置类,用于注册 WebSocket 的终端。

package com.example.websocketdemo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(myWebSocketHandler(), "/ws/users").setAllowedOrigins("*");
    }

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

四、创建 WebSocket 处理器

接下来,我们实现 WebSocket 处理器,用于处理连接、消息等操作。

package com.example.websocketdemo.handler;

import org.springframework.web.socket.*;
import org.springframework.web.socket.handler.TextWebSocketHandler;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class MyWebSocketHandler extends TextWebSocketHandler {

    private Map<String, WebSocketSession> sessions = new ConcurrentHashMap<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        // 获取 URL 参数
        String userId = session.getUri().getQuery();
        System.out.println("用户连接,userId: " + userId);
        sessions.put(userId, session);
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        System.out.println("收到用户消息:" + message.getPayload());
        // 这里可以添加逻辑处理消息并回应用户
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        // 处理用户断开连接
        System.out.println("用户断开连接");
    }
}

五、启动 Spring Boot 应用

src/main/java/com/example/websocketdemo/WebsocketdemoApplication.java 中,启动你的 Spring Boot 应用:

package com.example.websocketdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebsocketdemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebsocketdemoApplication.class, args);
    }
}

六、前端连接示例

为了测试 WebSocket 服务器,可以使用简单的 HTML 和 JavaScript 来连接。

<!DOCTYPE html>
<html>
<head>
    <title>Test WebSocket</title>
</head>
<body>
    <h1>WebSocket 测试</h1>
    <script>
        const userId = "1234"; // 假设这是要传递的参数
        const ws = new WebSocket(`ws://localhost:8080/ws/users?userId=${userId}`);

        ws.onopen = () => {
            console.log('连接已建立');
            ws.send('Hello from client!');
        };

        ws.onmessage = (event) => {
            console.log('收到消息:', event.data);
        };

        ws.onclose = () => {
            console.log('连接已关闭');
        };
    </script>
</body>
</html>

七、运行应用

  1. 启动 Spring Boot 应用后,打开你的浏览器,访问上述 HTML 文件。
  2. 打开浏览器的开发者工具(F12),你应该能看到连接建立和收到消息的日志。

总结

通过以上步骤,我们成功搭建了一个 WebSocket 服务端,并实现了通过 URL 传递参数的连接。这个范例展示了 WebSocket 的基本用法,你可以在此基础上扩展更多功能,例如处理多用户会话、广播消息等。WebSocket 是实现实时通信的强大工具,在开发实时聊天、游戏、财务监控等应用时非常有用。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部