SpringBoot集成WebSocket实现前后端消息互传的方法

下面是 SpringBoot 集成 WebSocket 实现前后端消息互传的完整攻略。

简介

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得浏览器和服务器之间的实时通信变得更加容易。Spring Boot 提供了一个强大的 WebSocket 模块,可以轻松实现 WebSocket 的集成。

示例1:实现前后端简单文字消息互传

1. 添加依赖

在 pom.xml 添加以下依赖:

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

2. 配置 WebSocket

在 Spring Boot 中,WebSocket 的配置非常简单,只需添加一个 @Configuration 类,然后在该类中添加 @Bean 方法,用于配置默认的 Spring Boot WebSocket 配置。

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

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

    class MyHandler extends TextWebSocketHandler {

        private WebSocketSession session;

        @Override
        public void afterConnectionEstablished(WebSocketSession session) throws Exception {
            this.session = session;
            System.out.println("Connected");
        }

        @Override
        protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
            String payload = message.getPayload();
            System.out.println("Received message: " + payload);
            session.sendMessage(new TextMessage("Echo: " + payload));
        }

        @Override
        public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
            System.out.println("Disconnected");
        }

    }

}

在上述示例中,首先我们定义了一个 MyHandler 类,继承了 TextWebSocketHandler,并重写了其中的三个方法。这三个方法分别用于处理 WebSocket 连接建立、文本消息接收和连接关闭事件。

在 MyHandler 中,我们将收到的消息原样返回("Echo: " + payload),用于测试 WebSocket 的连接是否成功。最后,在 registerWebSocketHandlers 方法中,我们将 MyHandler 类添加到指定的 WebSocketHandlerRegistry 中("/myHandler")。

3. 编写前端页面

在 index.html 页面中,添加以下代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket Test</title>
    <script src="/js/jquery.js"></script>
    <script src="/js/stomp.min.js"></script>
    <script>
        var myWebSocket = new WebSocket("ws://" + window.location.host + "/myHandler");
        myWebSocket.onopen = function (event) {
            console.log("WebSocket opened");
        };
        myWebSocket.onmessage = function (event) {
            var message = event.data;
            $("#messages").append("<li>" + message + "</li>");
        };
        $(function () {
            $("#sendBtn").click(function () {
                var message = $("#messageInput").val();
                myWebSocket.send(message);
                $("#messageInput").val("");
            });
        });
    </script>
</head>
<body>
    <h1>WebSocket Test</h1>
    <ul id="messages"></ul>
    <div>
        <label for="messageInput">Message:</label>
        <input type="text" id="messageInput" />
        <button type="button" id="sendBtn">Send</button>
    </div>
</body>
</html>

在上述示例中,我们首先创建一个 WebSocket 对象,并连接到指定的服务端路径("ws://" + window.location.host + "/myHandler")。接着,我们在 onopenonmessage 事件中分别定义 WebSocket 连接成功和接收消息的处理逻辑。

在页面中,添加一个文本框和按钮用于发送消息,在按钮的 click 事件中,我们将文本框中的内容通过 WebSocket 对象发送给服务端,然后清空文本框。

4. 启动应用程序

启动 Spring Boot 应用程序,访问 http://localhost:8080/index.html 即可。在文本框中输入消息并点击 Send 按钮,即可在页面上看到返回的消息(添加了前缀 "Echo: ")。

示例2:实现前后端简单点赞功能

1. 添加依赖

在 pom.xml 添加以下依赖:

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

2. 配置 WebSocket

在 Spring Boot 中,WebSocket 的配置非常简单,只需添加一个 @Configuration 类,然后在该类中添加 @Bean 方法,用于配置默认的 Spring Boot WebSocket 配置。

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    private static Map<String, WebSocketSession> sessions = new ConcurrentHashMap<>();

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

    class MyHandler extends TextWebSocketHandler {

        private WebSocketSession session;

        @Override
        public void afterConnectionEstablished(WebSocketSession session) throws Exception {
            this.session = session;
            sessions.put(session.getId(), session);
            System.out.println("Connected");
        }

        @Override
        protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
            String payload = message.getPayload();
            System.out.println("Received message: " + payload);
            for (WebSocketSession s : sessions.values()) {
                if (s.isOpen()) {
                    s.sendMessage(new TextMessage(payload));
                }
            }
        }

        @Override
        public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
            sessions.remove(session.getId());
            System.out.println("Disconnected");
        }

    }

}

在上述示例中,首先我们定义了一个 MyHandler 类,该类继承了 TextWebSocketHandler,并重写了其中的三个方法。这三个方法分别用于处理 WebSocket 连接建立、文本消息接收和连接关闭事件。

在 MyHandler 中,我们定义了一个静态成员变量 sessions,用于存储所有连接的 WebSocketSession。在 afterConnectionEstablished 方法中,我们将当前连接加入到 sessions 中。在 handleTextMessage 方法中,我们将接收到的消息广播给所有连接的 WebSocketSession(除了发送者自己)。在 afterConnectionClosed 方法中,我们将当前连接从 sessions 中删除。

registerWebSocketHandlers 方法中,我们将 MyHandler 类添加到指定的 WebSocketHandlerRegistry 中("/myHandler")。

3. 编写前端页面

在 index.html 页面中,添加以下代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket Test</title>
    <script src="/js/jquery.js"></script>
    <script src="/js/stomp.min.js"></script>
    <script>
        var myWebSocket = new WebSocket("ws://" + window.location.host + "/myHandler");
        myWebSocket.onopen = function (event) {
            console.log("WebSocket opened");
        };
        myWebSocket.onmessage = function (event) {
            var message = event.data;
            $("#votes").text(message);
        };
        $(function () {
            $("#voteBtn").click(function () {
                var message = "vote";
                myWebSocket.send(message);
                $("#voteBtn").attr("disabled", true);
            });
        });
    </script>
</head>
<body>
    <h1>WebSocket Test</h1>
    <p>
        Votes: <span id="votes">0</span>
    </p>
    <button type="button" id="voteBtn">Vote</button>
</body>
</html>

在上述示例中,我们首先创建一个 WebSocket 对象,并连接到指定的服务端路径("ws://" + window.location.host + "/myHandler")。接着,我们在 onopenonmessage 事件中分别定义 WebSocket 连接成功和接收消息的处理逻辑。

在页面中,添加一个按钮用于投票,在按钮的 click 事件中,我们将一个 "vote" 字符串通过 WebSocket 对象发送给服务端,然后将按钮变为不可点击状态。

4. 启动应用程序

启动 Spring Boot 应用程序,访问 http://localhost:8080/index.html 即可。在页面中点击 Vote 按钮,即可看到投票数的变化(通过 WebSocket 广播到所有连接的 WebSocketSession)。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot集成WebSocket实现前后端消息互传的方法 - Python技术站

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

相关文章

  • mac系统下载、安装、使用Java8教程

    Mac系统下载、安装、使用Java8教程 下载Java8 在Mac系统上下载Java8有两种方式: 1. Oracle官网下载 访问Oracle官网,找到对应的JDK版本并下载,具体下载步骤如下: 找到“Java SE Development Kit 8 Downloads”,点击“Download”按钮。 接受许可协议,选择对应的操作系统下载JDK安装包。…

    Java 2023年5月24日
    00
  • java连接MySQl数据库实例代码

    Java连接MySQL数据库需要以下几个步骤: 下载MySQL的Java驱动 加载驱动 建立连接 创建Statement对象 执行SQL语句 处理结果集 关闭结果集,Statement和连接 下面是一个完整的示例代码: // 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立连接 S…

    Java 2023年6月16日
    00
  • SpringMvc响应数据及结果视图实现代码

    针对SpringMvc响应数据及结果视图实现代码的完整攻略,我们可以分为以下几个部分进行讲解。 一、SpringMVC响应数据的方式 SpringMVC提供了多种方式响应数据,分别如下: 转发 forward 重定向 redirect 返回JSON数据 返回XML数据 返回文件 1. 转发 forward 使用转发可以将请求转发给其他控制器或JSP页面。实现…

    Java 2023年6月15日
    00
  • jsp+servlet实现最简单的增删改查代码分享

    下面来详细讲解 JSP+Servlet 实现最简单的增删改查代码分享的完整攻略。 1. 准备工作 在开始编写代码之前,需要先准备好以下工具和环境: JDK 1.8 或以上版本 Tomcat 8 或以上版本 Eclipse 或其他 Java IDE 2. 创建项目 在 Eclipse 中创建新的动态 Web 项目,选择 Web Application 项目类型…

    Java 2023年6月15日
    00
  • 常见的Java网络编程协议有哪些?

    常见的Java网络编程协议有如下几种: TCP/IP协议:TCP/IP协议是互联网传输层协议的基础协议。Java中通过Socket实现TCP/IP协议网络编程。Socket类提供了底层的TCP/IP通信功能,开发者可以使用它来创建基于TCP协议的网络应用程序。 HTTP协议:HTTP协议是Web应用程序中使用得最多的协议。Java中通过HttpURLConn…

    Java 2023年5月11日
    00
  • JSP实现计算器功能(网页版)

    下面我将为您详细讲解“JSP实现计算器功能(网页版)”的完整攻略。 概述 计算器是一种非常常见的工具,JSP可以通过表单和后端计算来实现网页版的计算器。本文将介绍如何使用JSP技术来实现一个简单的网页版计算器。 实现步骤 1. 创建JSP文件 首先,我们需要创建一个JSP文件,用于接收用户的输入,并进行计算。在JSP文件中,我们可以使用HTML标记和JSP指…

    Java 2023年6月15日
    00
  • JAVA中STRING的常用方法小结

    下面是关于”JAVA中STRING的常用方法小结”的完整攻略: 1. 字符串的常用方法 Java中String类的常用方法如下: 1.1 以字符串形式返回字符序列 String str = "Hello World!"; System.out.println(str.toString()); 结果:Hello World! 1.2 将字符…

    Java 2023年5月26日
    00
  • SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解

    一、概述 本文将详细介绍如何在SpringBoot应用程序中使用JmsTemplate集成队列模式和主题模式。本文将提供XML和JavaConfig两种配置方式。我们将从简单的应用程序开始,使用单个生产者和单个队列或主题。然后,我们将更改为多个生产者和多个队列和主题。通过本文,您将了解如何在SpringBoot应用程序中集成消息传递,以便实现单个或分布式系统…

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