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日

相关文章

  • 360随身wifi不能用怎么办 360随身wifi驱动的安装及使用步骤

    360随身wifi不能用怎么办?360随身wifi驱动的安装及使用步骤是什么? 如果您的360随身wifi不能用,可能是由于驱动程序问题导致的。以下是关于如何解决360随身wifi不能用的攻略,包括以下几个步骤: 步骤1:检查硬件连接 首先,您需要检查360随身wifi的硬件连接是否正确。以下是检查硬件连接的步骤: 确保360随身wifi已插入电脑的USB接…

    html 2023年5月17日
    00
  • otg功能是什么?手机otg功能怎么用?

    OTG功能是什么?手机OTG功能怎么用? OTG(On-The-Go)是一种USB标准,它允许设备在不需要计算机的情况下直接连接到其他设备。手机OTG功能是指手机可以通过OTG线连接到其他USB设备,例如U盘、鼠标、键盘等。以下是关于OTG功能的攻略,包括以下几个步骤: 步骤1:检查手机是否支持OTG功能 在使用手机OTG功能之前,您需要检查您的手机是否支持…

    html 2023年5月17日
    00
  • 解决HttpPost+json请求—服务器中文乱码及其他问题

    下面是详细的攻略: 问题描述 在使用HttpPost+json请求时,可能因为服务器未正确设置字符编码导致中文乱码等问题。 解决方法 1. 设置请求头部Content-Type 通过设置请求头部Content-Type,告诉服务器请求的内容为json格式,并且指定字符编码为utf-8。 HttpPost httpPost = new HttpPost(url…

    html 2023年5月31日
    00
  • Excel打开CSV文件中文显示乱码该怎么办?

    当我们用Excel打开CSV文件时,由于编码格式的不同,可能会出现中文显示乱码的情况。针对这一问题,我们可以采用以下方法进行解决: 1. 确保CSV文件编码格式正确 CSV文件本身是没有编码格式的,但我们在将其生成过程中,可以指定其编码格式,比如UTF-8、GB2312等。因此,在打开CSV文件前,我们需要确认其编码格式,确保其与Excel使用的编码格式相同…

    html 2023年5月31日
    00
  • JSP出现中文乱码问题解决方法详解

    以下是 “JSP出现中文乱码问题解决方法详解” 的完整攻略。 1. 问题描述 在JSP页面中,如果出现中文字符,有时会出现乱码,影响用户体验。这是因为在处理中文字符时,如果编码不匹配,就有可能出现乱码问题。下面将详细介绍JSP中出现中文乱码问题的解决方法。 2. 解决方法 2.1. 设置编码过滤器 在JSP页面中,可以添加编码过滤器,用于强制设置编码格式。编…

    html 2023年5月31日
    00
  • 完美解决ajax跨域请求下parsererror的错误

    如果在ajax跨域请求中出现parsererror的错误,这可能是由于跨域请求时response header中Access-Control-Allow-Origin字段未设置导致的。在这种情况下,我们可以通过以下方法来完美解决这个问题。 步骤一:为服务端添加Access-Control-Allow-Origin头部 在服务端的响应头部添加Access-Co…

    html 2023年5月30日
    00
  • Win10重置后不能更新怎么办 Win10更新提示0x8024402f错误的解决方法

    如果您在Win10重置后不能更新,或者在更新时遇到0x8024402f错误提示,可以按照以下步骤进行操作: 步骤1:检查网络连接 确保您的电脑已连接到可用的网络。 检查您的网络连接是否正常。 确保您的网络连接没有被防火墙或其他安全软件阻止。 步骤2:清除更新缓存 按下Win+R键,打开运行窗口。 输入“services.msc”,并按下回车键。 在“服务”窗…

    html 2023年5月17日
    00
  • c# xml API操作的小例子

    针对“c# xml API操作的小例子”的完整攻略,我将按照以下几个方面进行讲解: XML基础概念简介 C#中XML API的使用说明 两条示例说明 XML基础概念简介 XML即可扩展标记语言(Extensible Markup Language),是一种常用的数据交换格式,它的结构及语法类似于HTML,但是XML的标签是没有预定义的,需要用户自定义。 XM…

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