SpringBoot集成WebSocket实现后台向前端推送信息的示例

下面我来详细讲解一下“SpringBoot集成WebSocket实现后台向前端推送信息”的完整攻略。

简介

WebSocket是一种在Web浏览器和服务器之间进行双向通信的技术,它可以让Web页面实时获取到服务器端推送的信息,因此它被广泛应用于实时推送、在线聊天、在线游戏等场景。SpringBoot框架对WebSocket进行了良好的支持,可以非常方便地实现后台向前端推送信息的功能。

实现步骤

下面我们来详细介绍一下SpringBoot集成WebSocket实现后台向前端推送信息的步骤。

1. 添加WebSocket依赖

在pom.xml文件中添加如下依赖:

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

2. 定义WebSocket配置类

新建一个类,命名为WebSocketConfig,并添加@Configuration和@EnableWebSocket注解。

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

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

    @Bean
    public MyHandler myHandler() {
        return new MyHandler();
    }

}

上述代码中,我们通过WebSocketConfigurer接口的registerWebSocketHandlers方法注册了一个WebSocket处理器,这个处理器的名称为"/myHandler",对应MyHandler类。其中,setAllowedOrigins("*")表示允许跨域访问。

3. 定义WebSocket处理器

新建一个类,命名为MyHandler,继承自TextWebSocketHandler,并实现以下方法:

public class MyHandler extends TextWebSocketHandler {

    private static final List<WebSocketSession> 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) {
            s.sendMessage(message);
        }
    }

}

上述代码中,我们首先定义了一个sessions列表,用于保存所有已连接的WebSocketSession实例。在afterConnectionEstablished方法中,我们将新的WebSocketSession实例添加到sessions列表中;在afterConnectionClosed方法中,我们将已关闭的WebSocketSession实例从sessions列表中删除;在handleTextMessage方法中,我们遍历sessions列表,将收到的消息通过sendMessage方法发送给所有的WebSocketSession实例。

4. 前端页面接收消息

在前端页面中,可以通过WebSocket连接到MyHandler处理器,从而接收到后台推送的消息。示例代码如下:

<script>
    var socket = new WebSocket("ws://localhost:8080/myHandler");
    socket.onmessage = function(event) {
        console.log(event.data);
    };
</script>

上述代码中,我们通过WebSocket对象的onmessage事件监听后台传来的消息,并将消息写入到控制台中。这样,当后台向前端推送消息时,就会在控制台中输出消息内容。

示例说明

示例一

假设我们现在有一个在线聊天室的需求,聊天室中可以实时接收到其他用户发送的消息。我们可以通过WebSocket和SpringBoot实现这个功能。

具体实现步骤如下:

  1. 添加WebSocket依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  1. 定义WebSocket配置类:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(chatHandler(), "/chat").setAllowedOrigins("*");
    }

    @Bean
    public ChatHandler chatHandler() {
        return new ChatHandler();
    }
}
  1. 定义WebSocket处理器:
public class ChatHandler extends TextWebSocketHandler {
    private static final List<WebSocketSession> 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) {
            s.sendMessage(message);
        }
    }
}
  1. 前端页面接收消息:
<script>
    var socket = new WebSocket("ws://localhost:8080/chat");
    socket.onmessage = function(event) {
        var data = JSON.parse(event.data);
        var message = "[" + data.from + "]: " + data.message;
        var li = document.createElement("li");
        li.innerHTML = message;
        document.getElementById("messages").appendChild(li);
    };

    function send() {
        var message = document.getElementById("message").value;
        var from = document.getElementById("from").value;
        socket.send(JSON.stringify({
            from: from,
            message: message
        }));
        document.getElementById("message").value = "";
    }
</script>

上述代码中,我们定义了一个聊天室的界面,包括输入框、发送按钮和消息列表。当用户输入消息后,点击发送按钮,就会将消息发送给后台的WebSocket处理器MyHandler。而当MyHandler接收到消息后,会将消息发送给所有的WebSocketSession实例,从而广播给所有在线用户。在线用户的页面会实时收到后台传来的消息。

示例二

假设我们现在想要向所有在线用户实时推送某个股票的实时价格。我们可以通过WebSocket和SpringBoot实现这个功能。

具体实现步骤如下:

  1. 添加WebSocket依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  1. 定义WebSocket配置类:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(stockHandler(), "/stock").setAllowedOrigins("*");
    }

    @Bean
    public StockHandler stockHandler() {
        return new StockHandler();
    }
}
  1. 定义WebSocket处理器:
public class StockHandler extends TextWebSocketHandler {
    private static final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();

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

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

    private void sendPrice(WebSocketSession session) throws IOException {
        Random random = new Random();
        double price = random.nextDouble() * 100;
        session.sendMessage(new TextMessage(Double.toString(price)));
    }

    @Scheduled(fixedDelay = 1000)
    public void sendPriceToAll() throws IOException {
        for (WebSocketSession session : sessions) {
            sendPrice(session);
        }
    }
}

上述代码中,我们在WebSocket处理器中定义一个sendPrice方法,用于向特定的WebSocketSession实例发送一个随机的股价信息。在afterConnectionEstablished方法中,我们添加新连接的WebSocketSession实例,并且发送一个初始股价信息。在sendPriceToAll方法中,我们将当前的股价信息广播给所有在线的WebSocketSession实例,从而实现实时股价更新的功能。

  1. 前端页面接收消息:
<script>
    var socket = new WebSocket("ws://localhost:8080/stock");
    socket.onmessage = function(event) {
        document.getElementById("price").innerHTML = event.data;
    };
</script>

上述代码中,我们定义了一个页面,用于显示股价信息。当我们连接到StockHandler处理器所在的地址时,就能接收到后台传来的股价信息,并将其实时地显示在页面上。

总结

通过以上示例,我们可以看出SpringBoot集成WebSocket实现后台向前端推送信息非常简单,只需要几行代码就能实现实时推送。通过WebSocket,我们可以轻松地实现实时推送、在线聊天、在线游戏等场景,为我们的Web应用添加更加完善的实时交互功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot集成WebSocket实现后台向前端推送信息的示例 - Python技术站

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

相关文章

  • jQWidgets jqxWindow closeButtonAction属性

    让我来详细讲解一下 jQWidgets jqxWindow closeButtonAction 属性的使用。 1. closeButtonAction 属性是什么? closeButtonAction 是 jQWidgets jqxWindow 组件中关闭按钮(X号)的行为属性。它决定了当用户点击关闭按钮时,窗口应该如何响应。 closeButtonActi…

    jquery 2023年5月12日
    00
  • javascript Ajax 类实现代码

    关于”javascript Ajax 类实现代码”,可以分为以下步骤来实现: 准备工作 在实现 Ajax 类之前,需要确保先引入了 XMLHttpRequest 对象来实现 XMLHttpRequest(Ajax) 请求。 在此基础上,我们可以开始着手创建 Ajax 类了。 实现 Ajax 类 创建一个 Ajax 类: class Ajax { } 在类中添…

    jquery 2023年5月27日
    00
  • 浅谈Jquery核心函数

    浅谈JQuery核心函数 1. 什么是 JQuery 核心函数? JQuery 核心函数是 JQuery 框架中最重要的组成部分,也是 JQuery 框架最基本的功能模块。它是一组用于访问 JavaScript 文档对象模型(DOM)的函数,可以通过简洁的语法快速完成 DOM 操作,实现网页的交互效果和动态性。 2. JQuery 核心函数的优势 语法简单明…

    jquery 2023年5月28日
    00
  • JQuery实现超链接鼠标提示效果的方法

    下面是详细讲解“JQuery实现超链接鼠标提示效果的方法”的完整攻略: 1. 什么是超链接鼠标提示效果 超链接鼠标提示效果,即当鼠标悬浮在一个超链接上时,在鼠标的周围出现一个提示框,显示超链接的标题或者一些相关信息。 2. 基本思路 实现超链接鼠标提示效果的基本思路是在超链接对象的mouseover事件中,添加一个弹出框,当鼠标移出时,移除该弹出框。 3. …

    jquery 2023年5月28日
    00
  • jQWidgets jqxListBox updateItem()方法

    jQWidgets jqxListBox updateItem()方法详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件工具包。ListBox是其中之一。本文将详细介绍jqxListBox的updateItem()方法,包括定义、语法和示例。 updateItem()方法定义 jqxListBox的updateItem()方法用于…

    jquery 2023年5月10日
    00
  • jQuery1.6 使用方法二

    jQuery 1.6 是 jQuery 的一个版本,在使用过程中,有多种使用方法。其中,方法二是一种常用的使用方法,它可以通过 CDN 或本地引用的方式来使用 jQuery 库,下面介绍该方法的详细攻略。 1. 引用 jQuery 1.6 库 引用 jQuery 库是使用 jQuery 的第一步,我们可以通过以下两种方式来引用 jQuery 1.6 库: 1…

    jquery 2023年5月28日
    00
  • 用jquery实现学校的校历(asp.net+jquery ui 1.72)

    下面是实现学校校历的完整攻略: 1. 准备工作 在开始实现之前,先要确保你的ASP.NET项目中已经引入了jQuery和jQuery UI库。 2. 页面结构 首先,在ASP.NET中建立一个Web Form页面,页面可以根据具体需求来安排,这里我们以每月的校历为例,每个月的信息通过一个表格进行展示,代码如下: <div class="cal…

    jquery 2023年5月29日
    00
  • jquery选择器大全 全面详解jquery选择器

    JQuery 选择器大全 JQuery 选择器是使用 JQuery 操作 HTML 元素的核心技巧之一。本文为大家提供 JQuery 选择器的全面详解,包含了常用的选择器以及一些不常用但很实用的选择器,希望能帮助各位更好地掌握选择器的用法。 1. 基本选择器 1.1 元素选择器 元素选择器是指按照 HTML 元素的标签名来选择元素。该选择器可以用标签名、类名…

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