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日

相关文章

  • Java中Lambda表达式用法介绍

    Java中Lambda表达式用法介绍 Lambda表达式简介 Lambda表达式是Java8中引入的一种新的语法特性,简化了匿名函数的实现方式。使用Lambda表达式语法可以使代码更加简洁、易读。Lambda表达式是一个匿名函数,它没有名称、修饰符以及返回类型。Lambda表达式的主要功能是用来定义匿名内部类的实例。 Lambda表达式适用于函数式接口,函数…

    Java 2023年5月26日
    00
  • Java毕业设计实战之生活旅行分享平台的实现

    Java毕业设计实战:生活旅行分享平台实现攻略 一、需求分析 我们要实现的是一个生活旅行分享平台,用户可以在上面发布分享自己的生活和旅游经历,也可以查看他人的分享,进行点赞、评论等互动操作。 我们需要实现以下功能:- 用户注册和登录- 发布分享、编辑分享、删除分享- 查看分享的列表,包括按照热度、发布时间等排序方式- 点赞分享、取消赞,评论分享、回复评论- …

    Java 2023年5月19日
    00
  • Java NIO和IO的区别

    Java NIO和IO是两种处理I/O操作的不同方式,Java NIO提供了一种高效的、基于缓冲区的I/O操作,而传统的Java IO则是基于流式(stream-based)的方式。 以下是Java NIO和IO的几个重要区别: 缓冲区(Buffer)与流(Stream)的区别 Java IO是面向流的编程,数据从一个地方流动到另一个地方,通常是通过Inpu…

    Java 2023年5月19日
    00
  • java反射的一些理解

    首先简单介绍下java反射的应用场景:java反射多用于框架设计中。 其次,简述下框架:可重复用的,用来提高编程效率的代码。一些重复性的工作不需要在去开发,直接利用框架集成起来,用的时候调用框架,传递参数等等。 再次,介绍下java反射获取类对象的三种方式: Class.forName(“全限定类名”):这种用的最常见,也最符合反射的理念,参数可以是字符串,…

    Java 2023年4月22日
    00
  • 在React 组件中使用Echarts的示例代码

    使用Echarts在React组件中展示图表是很常见的需求。下面是一个完整的示例代码,你可以根据你自己的需求进行修改和调整。 安装 Echarts 首先,我们需要安装 Echarts。 使用 npm 安装 bash npm install echarts –save 使用 yarn 安装 bash yarn add echarts 导入 Echarts 在…

    Java 2023年6月15日
    00
  • java实现秒表功能

    下面是Java实现秒表功能的完整攻略: 确定界面布局 首先,要确定秒表界面的布局,可以使用Swing包提供的JFrame、JLabel等组件。 一个简单的秒表GUI界面可以包含如下控件: 用于显示秒数的JLabel。 用于开始、停止、清零等操作的JButton。 (可选)用于记录计时时间的列表或文本框。 编写计时器逻辑 初始秒表面板布局完成后,需要编写计时器…

    Java 2023年5月20日
    00
  • Java开发环境配置方法

    Java开发环境配置方法 为了进行Java开发,需要在计算机上配置相应的开发环境。下面是Java开发环境配置的方法: 1. 下载JDK 要安装Java开发环境,必须先下载Java Development Kit(JDK)。从Oracle官方网站上下载并安装最新版本的JDK。 官方下载链接: https://www.oracle.com/java/techno…

    Java 2023年5月23日
    00
  • Java Servlet生成JSON格式数据并用jQuery显示的方法

    下面是 Java Servlet 生成 JSON 格式数据并用 jQuery 显示的方法的完整攻略。 什么是 JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写。 Servlet 生成 JSON 1. 添加依赖 首先需要添加一个 JSON 库,常用的有 Gson 和 FastJSON。这里…

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