0

0

Spring Boot中使用WebSocket实现推送和通知功能

PHPz

PHPz

发布时间:2023-06-23 11:47:50

|

2135人浏览过

|

来源于php中文网

原创

在现代web应用程序开发中,websocket是实现即时通信和实时数据传输的常用技术。spring boot框架提供了集成websocket的支持,使得开发者可以非常方便地实现推送和通知功能。

本文将介绍Spring Boot中如何使用WebSocket实现推送和通知功能,并演示一个简单的实时在线聊天室的实现。

  1. 创建Spring Boot项目

首先,我们需要创建一个Spring Boot项目。可以在Spring Initializr网站上使用web和WebSocket依赖来快速创建一个新项目。代码如下:


    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.boot
        spring-boot-starter-websocket
    
  1. 配置WebSocket

接下来,我们需要配置WebSocket以使其能够在Spring Boot应用中运行。

首先,我们需要在应用程序的配置文件中添加以下属性:

spring.websocket.enabled=true

接着,在Spring Boot的配置类中添加一个@EnableWebSocket注解,启用WebSocket支持。同时,我们需要实现一个WebSocketConfigurer接口,在其中注册处理程序和消息拦截器,以便处理WebSocket请求和消息。

代码如下:

koly.club
koly.club

一站式社群管理工具

下载
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new WebSocketHandler(), "/chat").setAllowedOrigins("*").withSockJS();
    }
}

在上面的代码中,我们注册了一个处理程序(即WebSocketHandler),该处理程序在客户端连接到“/ chat”端点时被调用。使用setAllowedOrigins方法来指定允许的来源,以便进行跨域请求,使用withSockJS方法以启用SockJS支持,以便与不支持WebSocket的浏览器兼容。

  1. 编写WebSocket处理程序

现在我们需要编写处理程序类,这个类会处理所有的WebSocket请求和消息。

在Spring Boot中,这个类只需要实现WebSocketHandler接口即可。我们将使用SimpeTextWebSocketHandler类,该类提供了处理WebSocket消息的基本功能,并且我们可以在其基础上扩展自己的处理程序。

代码如下:

public class WebSocketHandler extends TextWebSocketHandler {

    private final List sessions = new CopyOnWriteArrayList<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        sessions.add(session);
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        sessions.remove(session);
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        for (WebSocketSession s : sessions) {
            if (s.isOpen() && !s.equals(session)) {
                s.sendMessage(message);
            }
        }
    }
}

在上面的代码中,afterConnectionEstablished方法在新的WebSocket会话建立时被调用,afterConnectionClosed方法在WebSocket会话关闭时被调用。handleTextMessage方法处理所有的WebSocket消息,并发送给所有当前连接的客户端。

  1. 创建WebSocket客户端

现在,我们需要创建一个WebSocket客户端来测试实现的推送和通知功能。可以使用JavaScript的WebSocket API来创建一个WebSocket客户端。

代码如下:

const socket = new WebSocket('ws://localhost:8080/chat');

socket.onopen = function() {
  console.log('连接已建立');
};

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

socket.onerror = function(error) {
  console.log('发生错误:', error);
};

socket.onclose = function() {
  console.log('连接已关闭');
};

在上面的代码中,我们创建了一个WebSocket实例并尝试连接到ws:// localhost:8080 / chat。然后,我们监听WebSocket事件以获取打开,关闭,错误和消息事件。

  1. 运行项目

现在,我们可以启动Spring Boot应用并测试推送和通知功能。我们可以使用两个或多个WebSocket客户端来模拟不同的用户,并在一个客户端输入消息并将其广播到所有会话中的其他客户端。

使用Maven运行spring-boot:run命令来启动应用程序。

现在,打开多个浏览器窗口,每个窗口分别创建一个WebSocket客户端。输入消息并点击发送按钮,即可将消息推送到与您聊天的所有会话中的其他WebSocket客户端。

  1. 总结

在本教程中,我们已经学会了如何使用Spring Boot和WebSocket来实现推送和通知功能。借助WebSocket支持,我们可以创建实时、协作和多播应用程序,从而增强用户体验并提高应用程序的价值。

相关专题

更多
C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

29

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

55

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号