springboot websocket简单入门示例

让我为你详细介绍一下“Spring Boot WebSocket简单入门示例”的攻略。

简介

Spring Boot WebSocket使得在应用程序中添加实时数据交互功能变得非常容易。WebSocket是一种在单个TCP连接上全双工通信协议,它使得服务器端和客户端之间可以双向通信。下面,我们将演示如何在Spring Boot应用程序中使用WebSocket,为客户端提供Web实时通信功能。

搭建Spring Boot WebSocket环境

在开始之前,请确保你已经安装好Java和Spring Boot环境。如果你还没有,建议先完成相关环境的安装。

添加Spring Boot WebSocket依赖

WebSocket在Spring Boot中已经得到了良好的支持,所以我们只需要在Maven中添加相应的依赖即可。在pom.xml文件中添加以下依赖:

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

创建WebSocket配置类

在Spring Boot中,我们可以通过自定义WebSocket配置类来配置WebSocket。我们可以在配置类中使用@EnableWebSocket注解启用WebSocket,并实现WebSocketConfigurer接口来配置WebSocket相关的信息。

在示例代码中,我们创建一个WebSocketConfig类,代码如下:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

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

}

可以看到,我们通过@EnableWebSocket注解启用WebSocket,并在registerWebSocketHandlers方法中注册了一个名为WebSocketHandler的WebSocket处理器,同时设置了WebSocket的URL路径为/websocket

创建WebSocket处理器类

在WebSocket配置类中,我们注册了一个WebSocket处理器,那么我们就需要定义该处理器的具体实现。在示例代码中,我们创建了一个WebSocketHandler类作为WebSocket处理器,代码如下:

public class WebSocketHandler extends TextWebSocketHandler {

    private static final Logger logger = LoggerFactory.getLogger(WebSocketHandler.class);

    private final Map<WebSocketSession, String> sessionMap = new ConcurrentHashMap<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        logger.info("WebSocket连接已建立");
        sessionMap.put(session, session.getId());
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        logger.info("接收到消息:" + message.getPayload());
        session.sendMessage(new TextMessage("服务器已接收到您的消息"));
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        logger.info("WebSocket连接已关闭");
        sessionMap.remove(session);
    }

}

在该处理器类中,我们继承了TextWebSocketHandler类,重写了三个关键方法:

  • afterConnectionEstablished方法,在WebSocket连接建立后执行,我们在该方法中保存了WebSocketSession。

  • handleTextMessage方法,在WebSocket收到消息后执行,我们在该方法中处理了客户端发送的消息,并向客户端回复一条消息。

  • afterConnectionClosed方法,在WebSocket连接关闭后执行,我们在该方法中从保存WebSocketSession的Map中删除该Session。

到目前为止,我们已经完成了Spring Boot WebSocket的配置和WebSocket处理器的实现,下面我们将演示两个简单的示例。

示例1:使用JavaScript客户端向服务器发送WebSocket请求并接收数据

为了演示如何在Spring Boot WebSocket应用程序中使用JavaScript客户端向服务器发送WebSocket请求并接收数据,我们创建了一个前端网页,使用JavaScript代码向Spring Boot服务器发送WebSocket请求,代码如下:

<!DOCTYPE html>
<html>
<head>
    <title>Spring Boot WebSocket示例 - JavaScript客户端</title>
    <script src="http://cdn.staticfile.org/jquery/3.4.1/jquery.min.js"></script>
    <script src="/webjars/sockjs-client/1.0.2/sockjs.min.js"></script>
    <script src="/webjars/stomp-websocket/2.3.3/stomp.min.js"></script>
</head>
<body>
    <h1>Spring Boot WebSocket示例 - JavaScript客户端</h1>
    <form>
        <textarea id="message"></textarea>
        <button type="button" onclick="sendMessage()">发送</button>
    </form>
    <p>
        <div id="response"></div>
    </p>
</body>
<script>
    var stompClient = null;
    function setConnected(connected) {
        $("#response").html("");
        $("#connect").prop("disabled", connected);
        $("#disconnect").prop("disabled", !connected);
        if (connected) {
            $("#response").append("<span>WebSocket连接已建立</span><br>");
        } else {
            $("#response").append("<span>WebSocket连接已关闭</span><br>");
        }
    }
    function connect() {
        var socket = new SockJS('/websocket');
        stompClient = Stomp.over(socket);
        stompClient.connect({}, function(frame) {
            setConnected(true);
            stompClient.subscribe('/topic/response', function(response) {
                showMessage(JSON.parse(response.body));
            });
        });
    }
    function disconnect() {
        if (stompClient != null) {
            stompClient.disconnect();
        }
        setConnected(false);
    }
    function sendMessage() {
        stompClient.send("/app/message", {}, JSON.stringify({'content': $("#message").val()}));
    }
    function showMessage(message) {
        $("#response").append("<span>" + message.content + "</span><br>");
    }
    $(function() {
        connect();
        $(window).unload(function() {
            disconnect();
        });
    });
</script>
</html>

在该代码中,我们使用了SockJS和STOMP协议,SockJS是一个WebSocket协议的兼容层,使得浏览器可以通过HTTP协议和服务器建立WebSocket连接,而STOMP协议是一个简单的、基于文本的协议,提供了一种统一的方式来处理WebSocket消息。

该代码所实现的是一个简单的聊天室功能,当用户在文本框中输入消息并点击“发送”按钮后,该消息将通过WebSocket发送到服务器,并在WebSocket连接成功后自动订阅/topic/response主题,以接收服务器的响应。在服务器收到WebSocket消息并处理完毕后,将响应发送到/topic/response主题,JavaScript客户端会自动接收到该响应并显示在页面上。

示例2:使用Java客户端向服务器发送WebSocket请求并接收数据

为了演示如何在Spring Boot WebSocket应用程序中使用Java客户端向服务器发送WebSocket请求并接收数据,我们创建了一个Java类,使用Java代码向Spring Boot服务器发送WebSocket请求,代码如下:

public class WebSocketClient {

    private StompSession stompSession;

    private final Logger logger = LoggerFactory.getLogger(WebSocketClient.class);

    public void connect() {
        WebSocketClientTransport transport = new WebSocketClientTransport(new StandardWebSocketClient());
        SockJsClient sockJsClient = new SockJsClient(Collections.singletonList(transport));
        StompSessionHandler sessionHandler = new MyStompSessionHandler();
        StompHeaders headers = new StompHeaders();
        headers.set("Authorization", "Bearer " + "your-auth-token");
        stompSession = sockJsClient.connect("/websocket", headers, sessionHandler).get();
        logger.info("WebSocket连接已建立");
    }

    public void disconnect() {
        stompSession.disconnect();
        logger.info("WebSocket连接已关闭");
    }

    public void sendMessage(String message) {
        stompSession.send("/app/message", message);
    }

    class MyStompSessionHandler extends StompSessionHandlerAdapter {

        @Override
        public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
            session.subscribe("/topic/response", new StompFrameHandler() {
                @Override
                public Type getPayloadType(StompHeaders headers) {
                    return String.class;
                }

                @Override
                public void handleFrame(StompHeaders headers, Object payload) {
                    logger.info("接收到消息:" + payload);
                }
            });
        }

    }

}

在该代码中,我们使用了SockJS和STOMP协议的Java客户端实现,该客户端可以连接到Spring Boot服务器的WebSocket服务,并订阅/topic/response主题,以接收来自服务器的响应。在应用程序中,我们使用了一个WebSocketClient类,该类实现了连接、断开连接、发送消息的功能。同时,我们也实现了一个StompSessionHandler类,在WebSocket连接建立后自动订阅/topic/response主题,以接收服务器的响应。当收到来自服务器的响应后,我们就可以在控制台中输出该响应。

到这里,我们已经完成了两个WebSocket示例。在实际开发中,WebSocket的应用场景非常广泛。比如有在线直播、在线游戏、自动化监控等领域,都可以使用WebSocket实现实时数据通信。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot websocket简单入门示例 - Python技术站

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

相关文章

  • SpringBoot Starter机制及整合tomcat的实现详解

    Spring Boot Starter机制是Spring Boot框架中的一个重要特性,它可以帮助我们快速集成各种常用的框架和组件。本文将详细讲解Spring Boot Starter机制及整合Tomcat的实现方法,包括以下内容: Spring Boot Starter机制简介 Spring Boot Starter的实现原理 整合Tomcat的实现方法 …

    Java 2023年5月15日
    00
  • 微信小程序 获取手机号 JavaScript解密示例代码详解

    首先,需要注意的是获取手机号的功能只能在已经授权获取用户手机号的场景中,才能够使用。在微信小程序中,需要先使用 wx.login() 获取到用户登录凭证 code,再调用 wx.request() 向后端服务器发送请求,获取用户加密的手机号信息。 以下是具体的流程和示例代码: 在小程序中,使用 wx.login() 获取用户登录凭证 code: wx.log…

    Java 2023年5月19日
    00
  • Java读取Excel文件内容的简单实例

    下面是详细解释。 Java读取Excel文件内容的简单实例 前置知识 在学习本文之前,需要掌握以下的知识: Java基础语法; 以及Java处理文件的基本方法。 环境准备 在开始本文之前,需要确保你的计算机中已经安装如下的工具: JDK; Eclipse或者其他Java开发环境。 实现步骤 步骤 1:新建项目 打开Eclipse,依次选择“File”-&gt…

    Java 2023年5月19日
    00
  • Java编程获取当前屏幕分辨率的方法示例

    下面我将详细讲解Java编程获取当前屏幕分辨率的方法示例的完整攻略。 步骤一:引入AWT库 AWT是Java提供的图形界面库,用于处理图形化界面相关的程序。在获取当前屏幕分辨率的过程中,需要用到该库中的Toolkit类,因此首先需要引入该库。 请在Java代码中加入以下语句: import java.awt.Toolkit; 步骤二:使用Toolkit类获取…

    Java 2023年5月26日
    00
  • springBoot项目常用目录解读

    下面是对“springBoot项目常用目录解读”的详细讲解: 1. 项目结构概述 在理解Spring Boot项目的目录结构之前,需要首先理解Spring Boot的项目结构。Spring Boot的项目结构与标准的Maven或Gradle项目结构类似,区别在于一个主要目录——src/main,这个目录中分别包含了几个子目录,如下: src/main/jav…

    Java 2023年5月19日
    00
  • Java 批量文件压缩导出并下载到本地示例代码

    要实现 Java 批量文件压缩导出并下载到本地,需要完成以下步骤: 构建压缩文件流 将文件流写入输出流 设置 HTTP 响应头信息 导出压缩文件 可以使用 java.util.zip 包中的 ZipOutputStream 对文件进行压缩。 以下是一个示例代码,实现将多个文件打成一个压缩包,压缩包文件名为 example.zip ,然后将压缩包导出并下载到本…

    Java 2023年5月20日
    00
  • java迷宫算法的理解(递归分割,递归回溯,深搜,广搜)

    介绍 Java迷宫算法旨在通过编程形成一个迷宫的图形,让计算机自动地创建和解决迷宫。本文将会介绍常见的四种Java迷宫算法:递归分割算法、递归回溯算法、深度优先搜索(DFS)和广度优先搜索(BFS)算法。 递归分割算法 递归分割算法首先创建一个空的网格表示迷宫。网格中的每个单元格都代表迷宫的一个位置。分割过程会对这些位置进行标记,就像把它们铺上拼图一样。该算…

    Java 2023年5月19日
    00
  • Java编程中的构造函数详细介绍

    Java中的构造函数是一种特殊的方法,用于创建对象并对其进行初始化。与一般的方法不同,构造函数没有返回类型,并且始终与类名相同。在本文中,我们将详细介绍Java编程中的构造函数,包括定义、使用以及常见问题。 定义构造函数 要定义构造函数,请使用与类名相同的名称,且不带返回类型。通常情况下,构造函数的参数列表与类的属性相似,用于对对象进行初始化。以下是一个简单…

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