SpringBoot整合WebSocket实现后端向前端发送消息的实例代码

下面是“SpringBoot整合WebSocket实现后端向前端发送消息的实例代码”的完整攻略:

1. 引入相关依赖

首先,我们需要在SpringBoot的项目中引入以下依赖:

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

2. 配置WebSocket

在SpringBoot的配置文件中,加入以下配置:

# 配置WebSocket
server.endpoint.prefix=/server
spring.mvc.websocket.path=/websocket

其中,server.endpoint.prefix表示WebSocket的服务前缀,一般为/serverspring.mvc.websocket.path表示WebSocket的请求路径,一般为/websocket

3. 编写WebSocket处理器

接下来,我们需要编写WebSocket的处理器。首先创建一个类,命名为MyHandler,并实现WebSocketHandler接口。在该类中,我们需要重写afterConnectionEstablishedhandleTextMessageafterConnectionClosed等方法:

@Component
public class MyHandler implements WebSocketHandler {

    private static final List<WebSocketSession> SESSIONS = new ArrayList<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        SESSIONS.add(session);
        System.out.println("连接建立:" + session.getId());
    }

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String payload = message.getPayload();
        for (WebSocketSession webSocketSession : SESSIONS) {
            if (webSocketSession.isOpen()) {
                webSocketSession.sendMessage(new TextMessage(payload));
            }
        }
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        SESSIONS.remove(session);
        System.out.println("连接关闭:" + session.getId());
    }

    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        if (session.isOpen()) {
            session.close();
        }
        SESSIONS.remove(session);
    }

    @Override
    public boolean supportsPartialMessages() {
        return false;
    }

}

在以上代码中,我们定义了一个SESSIONS列表,用于保存所有连接的WebSocketSession实例。在afterConnectionEstablished方法中,我们将当前连接的WebSocketSession对象添加到列表中,并打印连接建立的信息。在handleTextMessage方法中,我们遍历所有连接的WebSocketSession对象,将收到的消息发送给所有客户端。在afterConnectionClosed方法中,我们将关闭的WebSocketSession对象从列表中移除,并打印连接关闭的信息。在handleTransportError方法中,如果连接出现异常,我们需要将其关闭,并从列表中移除。最后,在supportsPartialMessages方法中返回false表示不支持分段传输消息。

4. 配置WebSocket拦截器

接着,在SpringBoot的配置类中,添加WebSocket的拦截器:

@Configuration
public class WebSocketConfig implements WebSocketConfigurer {

    @Autowired
    private MyHandler myHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(myHandler, "/websocket").addInterceptors(new HandshakeInterceptor() {
            @Override
            public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler webSocketHandler, Map<String, Object> attributes) throws Exception {
                System.out.println("握手前:" + request.getURI());
                return true;
            }

            @Override
            public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler webSocketHandler, Exception e) {
                System.out.println("握手后:" + request.getURI());
            }
        });
    }

}

在以上代码中,我们首先自动注入MyHandler处理器,然后在registerWebSocketHandlers方法中,对WebSocket的请求路径和处理器进行了注册,并添加了一个握手拦截器,用于在握手前和握手后做一些相关操作。

5. 前端页面

最后,我们需要编写前端页面来测试WebSocket的功能。在页面中,我们需要定义一个WebSocket对象,然后通过该对象与WebSocket服务器建立连接,并监听服务器发送的消息:

var socket;
if (!window.WebSocket) {
    console.log("浏览器不支持WebSocket");
} else {
    socket = new WebSocket("ws://localhost:8080/server/websocket");
    socket.onopen = function () {
        console.log("连接成功");
    };
    socket.onmessage = function (event) {
        console.log("收到消息:" + event.data);
    };
    socket.onclose = function () {
        console.log("连接关闭");
    };
    socket.onerror = function () {
        console.log("连接异常");
    };
}

在以上代码中,我们首先判断浏览器是否支持WebSocket,然后使用new WebSocket()函数创建一个WebSocket对象,指定连接的服务端地址为ws://localhost:8080/server/websocket,其中/server表示WebSocket的服务前缀,/websocket表示WebSocket的请求路径。接着,我们通过WebSocket对象的onopenonmessageoncloseonerror属性对WebSocket的相关事件进行监听和处理。

示例说明

示例一:发送消息

我们可以在前端页面的控制台中输入以下代码,向WebSocket服务器发送消息:

socket.send("Hello, WebSocket");

后端控制台会输出以下信息:

连接建立:ddc9ee55-14e8-1d26-3564-ae8b8667efc7
收到消息:Hello, WebSocket

前端控制台会输出以下信息:

连接成功

示例二:断开连接

我们也可以在前端页面的控制台中输入以下代码,手动断开WebSocket连接:

socket.close();

后端控制台会输出以下信息:

连接关闭:ddc9ee55-14e8-1d26-3564-ae8b8667efc7

前端控制台会输出以下信息:

连接关闭

这就是整合SpringBoot与WebSocket实现后端向前端发送消息的完整攻略,包括依赖引入、WebSocket配置、WebSocket处理器编写、WebSocket拦截器和前端页面示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合WebSocket实现后端向前端发送消息的实例代码 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • Get中文乱码IE浏览器Get中文乱码解决方案

    Get中文乱码IE浏览器Get中文乱码解决方案 背景 在使用IE浏览器进行Get请求时,经常会遇到中文乱码的情况。这是由于IE浏览器默认使用GBK编码来发送请求,但是常见的Web应用程序大多数使用UTF-8编码, 所以在接收到请求后,编码不匹配就出现了中文乱码的问题。 解决方案 解决Get中文乱码问题的关键是设置正确的编码。下面提供两种解决方案。 方案一:手…

    html 2023年5月31日
    00
  • 实现SQL Server 原生数据从XML生成JSON数据的实例代码

    实现 SQL Server 原生数据从 XML 生成 JSON 数据的实例代码需要经过以下几个步骤: 通过执行以下 T-SQL 语句打开服务器级别的 CLR 集成: sp_configure ‘clr enabled’, 1; GO RECONFIGURE; GO 在 C# 或 VB.NET 编写 CLR 用户定义函数(UDF)将 XML 格式的数据转换为 …

    html 2023年5月30日
    00
  • js操作XML文件的实现方法兼容IE与FireFox

    下面详细讲解如何使用JavaScript操作XML文件并兼容IE与Firefox。 1. 什么是XML文件? XML(Extensible Markup Language)是一种被设计用来传输和存储数据的标记语言。与HTML相比,XML更加灵活和自由,可以自定义标记,用来描述非常复杂的数据结构和内容。 2. 如何使用JavaScript操作XML文件 要使用…

    html 2023年5月30日
    00
  • Win10窗口的白色背景颜色怎么设置成护眼色?

    以下是Win10窗口的白色背景颜色设置成护眼色的攻略: 使用Windows 10自带的护眼模式:Windows 10自带了护眼模式,可以帮助您减少屏幕的蓝光辐射,从而减轻眼睛疲劳。请按照以下步骤进行操作: 点击Windows 10的“开始”按钮,然后选择“设置”。 在“设置”窗口中,选择“系统”。 在“系统”窗口中,选择“显示”。 在“显示”窗口中,找到“护…

    html 2023年5月17日
    00
  • smarty中英文多编码字符截取乱码问题解决方法

    Smarty中英文多编码字符截取乱码问题解决方法 在使用Smarty模板引擎进行中英文多编码字符截取时,可能会出现乱码问题。本篇文章将介绍该问题的解决方法。 问题描述 在Smarty模板引擎中进行中英文多编码字符截取时,可能会出现以下情况: {$str = "This is a sample string to test the functiona…

    html 2023年5月31日
    00
  • 闪耀暖暖暗夜行者高分搭配推荐 暗夜行者搭配攻略

    闪耀暖暖暗夜行者高分搭配推荐 暗夜行者搭配攻略 闪耀暖暖是一款非常受欢迎的女性向手机游戏,其中暗夜行者是游戏中的一种时装,非常受到玩家的喜爱。如果您想要在游戏中获得高分,可以按照以下攻略进行暗夜行者的搭配: 暗夜行者套装:暗夜行者套装是暗夜行者的基础搭配,可以获得一定的加成效果。在选择暗夜行者套装时,可以根据自己的喜好选择不同的颜色和款式。 饰品搭配:在暗夜…

    html 2023年5月17日
    00
  • JSP页面传参出现中文乱码的解决方案

    JSP页面传参中文乱码是一个常见的问题,主要原因是JSP默认使用的编码方式为ISO-8859-1,而中文字符集使用的是UTF-8或GBK等编码方式。在使用中文参数时,需要将编码方式进行转换才能正常显示。 以下是解决方案: 第一步:修改JSP页面编码方式 在JSP页面中加入以下代码,将编码方式设置为UTF-8: <%@ page contentType=…

    html 2023年5月31日
    00
  • 在FireFox/IE下Response中文文件名乱码问题解决方案

    针对“在Firefox/IE下Response中文文件名乱码问题解决方案”的完整攻略如下: 问题描述 在FireFox和IE中进行下载时,如果响应(Response)中的文件名是中文的话,可能会出现文件名乱码的问题。这是因为Firefox和IE对于Response的编码方式不一样导致的。 解决方案 我们需要在服务器端设置HTTP响应(Response)头信息…

    html 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部