Spring Boot WebSocket 从入门到实战

WebSocket 是 HTML5 中的一个新协议,它实现了浏览器与服务器全双工通信(full-duplex communication),使得客户端和服务器端可以随时相互推送数据。而 Spring Boot 提供了对 WebSocket 的支持,让我们可以轻松地在 Web 应用程序中使用 WebSocket 技术。本文将带你从入门到实战,深入了解 Spring Boot WebSocket。

一、什么是 WebSocket

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它可以在客户端和服务器之间建立一个长连接,使得客户端和服务器之间可以随时相互推送数据。与传统的 HTTP 协议相比,WebSocket 具有更低的延迟和更高的实时性,因此广泛应用于在线聊天、股票行情、游戏等领域。

二、WebSocket 的常见用途

  1. 在线聊天
  2. 股票行情
  3. 游戏
  4. 实时监控
  5. 即时通讯
  6. 门店实时系统

三、 Spring Boot WebSocket 的使用

  1. 添加依赖

首先,在 pom.xml 中添加 spring-boot-starter-websocket 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  1. 创建 WebSocketHandler

在 WebSocketHandler 中定义处理消息的逻辑。具体实现可以参考下面的代码:

@Component
public class MyWebSocketHandler extends TextWebSocketHandler {

    private static final Logger logger = LoggerFactory.getLogger(MyWebSocketHandler.class);

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {
        logger.info("Received message: {}", message.getPayload());
        session.sendMessage(new TextMessage("Hello, " + message.getPayload() + "!"));
    }
}

在上面的代码中,我们通过继承 TextWebSocketHandler 类来创建 WebSocketHandler。在 handleTextMessage 方法中,我们通过 WebSocketSession 对象来处理客户端发送的消息,并将处理结果返回给客户端。

  1. 配置 WebSocket

接下来,在 Spring Boot 的配置类中添加 WebSocket 配置。具体实现可以参考下面的代码:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Autowired
    private MyWebSocketHandler myWebSocketHandler;

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

在上面的代码中,我们首先通过 @Configuration 和 @EnableWebSocket 注解来启用 WebSocket 功能。然后,我们通过实现 WebSocketConfigurer 接口来注册 WebSocketHandler。在 registerWebSocketHandlers 方法中,我们将 MyWebSocketHandler 对象注册到 /websocket 路径下,并设置允许跨域请求。

  1. 编写客户端代码

最后,我们需要编写一个客户端代码来连接 WebSocket 服务器,并发送和接收消息。具体实现可以参考下面的代码:

var webSocket = new WebSocket("ws://localhost:8080/websocket");

webSocket.onopen = function(event) {
    console.log("WebSocket opened: " + event);
    webSocket.send("World");
};

webSocket.onmessage = function(event) {
    console.log("Received message: " + event.data);
    webSocket.close();
};

在上面的代码中,我们首先创建了一个 WebSocket 对象,并连接到 WebSocket 服务器。在 onopen 回调方法中,我们发送一条消息给服务器。在 onmessage 回调方法中,我们接收服务器发送的消息,并关闭 WebSocket 连接。

四、 实战案例:Spring Boot WebSocket 的在线聊天室

下面我们将通过一个实战案例来演示如何在 Spring Boot 中使用 WebSocket 实现在线聊天室功能。具体实现可以参考下面的代码:

@Controller
public class ChatController {

    private static final Logger logger = LoggerFactory.getLogger(ChatController.class);

    private Set<WebSocketSession> sessions = Collections.synchronizedSet(new HashSet<>());

    @GetMapping("/")
    public String index() {
        return "index";
    }

    @MessageMapping("/message")
    @SendTo("/topic/messages")
    public Message message(@Payload Message message) throws Exception {
        logger.info("Received message: {}", message);

        return message;
    }

    @EventListener
    public void handleWebSocketConnect(SessionConnectedEvent event) {
        WebSocketSession session = (WebSocketSession) event.getSource();
        sessions.add(session);
        logger.info("WS Session connected: {}", session);
    }

    @EventListener
    public void handleWebSocketDisconnect(SessionDisconnectEvent event) {
        WebSocketSession session = (WebSocketSession) event.getSource();
        sessions.remove(session);
        logger.info("WS Session disconnected: {}", session);
    }

    @ResponseBody
    @RequestMapping("/count")
    public int count() {
        return sessions.size();
    }
}

在上面的代码中,我们首先定义了一个 ChatController 类,用于处理 WebSocket 请求。在 index 方法中,我们返回了一个 HTML 页面,用于显示在线聊天室界面。

在 message 方法中,我们使用 @MessageMapping 注解来处理客户端发送的消息,并使用 @SendTo 注解将处理结果广播给所有客户端。在 handleWebSocketConnect 和 handleWebSocketDisconnect 方法中,我们分别处理 WebSocket 的连接和断开事件,并将连接的 WebSocketSession 对象保存到 sessions 集合中。

最后,在 count 方法中,我们返回当前在线用户数。

五、 总结

通过本文的介绍,我们了解了 WebSocket 的基本概念和常见用途。并深入学习了在 Spring Boot 中使用 WebSocket 的具体实现方法。特别是通过实战案例,我们更加深刻地理解了如何在 Spring Boot 中实现一个完整的在线聊天室应用程序。希望这篇文章对你有所帮助!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

包耳邹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值