SpringBoot整合websocket实现即时通信聊天

下面是详细讲解SpringBoot整合websocket实现即时通信聊天的攻略。

1. 环境准备

首先,我们需要准备好以下环境:

  • JDK 1.8及以上版本
  • Maven
  • Spring Boot 2.0.3.RELEASE及以上版本

2. 添加依赖

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

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

3. 创建WebSocket配置类

首先,我们需要创建一个WebSocket配置类,用来配置WebSocket相关的一些信息,比如Endpoint等:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new WebSocketHandler(), "/chat").setAllowedOrigins("*");
    }
}

在上面的代码中,我们通过@EnableWebSocket注解开启WebSocket功能,并实现了WebSocketConfigurer接口来配置WebSocket,其中WebSocketHandler()是我们自己定义的WebSocket处理器,/chat则是WebSocket的Endpoint。

4. 创建WebSocket处理器

接下来,我们需要创建一个WebSocket处理器,用来处理WebSocket的连接、断开、消息收发等操作:

@Component
public class WebSocketHandler extends TextWebSocketHandler {
    private static final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) {
        sessions.add(session);
        System.out.println("新连接加入:" + session.getId() + ",当前在线人数:" + sessions.size());
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
        sessions.remove(session);
        System.out.println("连接关闭:" + session.getId() + ",当前在线人数:" + sessions.size());
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        System.out.println("收到消息:" + message.getPayload());
        for (WebSocketSession s : sessions) {
            if (s.isOpen()) {
                s.sendMessage(message);
            }
        }
    }
}

在上面的代码中,我们通过@Component注解将该类注册为Spring的Bean组件,并继承了TextWebSocketHandler类,实现了afterConnectionEstablished()afterConnectionClosed()handleTextMessage()方法,分别用来处理WebSocket的连接、断开和消息收发操作。

handleTextMessage()方法中,我们将接收到的消息发送给所有连接的客户端。

5. 编写前端页面

最后,我们需要编写一个前端页面,用来测试WebSocket的连接和消息收发功能。

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket测试</title>
    <meta charset="UTF-8">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
    <div>连接状态:<span id="status"></span></div>
    <hr>
    <div>消息列表:</div>
    <ul id="messageList"></ul>
    <hr>
    <div>
        发送消息:<input type="text" id="message"/> <input type="button" value="发送" onclick="sendMessage()"/>
    </div>
    <script>
        $(function () {
            // 创建WebSocket连接
            var socket = new WebSocket('ws://' + window.location.host + '/chat');
            // 连接打开事件
            socket.onopen = function (event) {
                $('#status').text('已连接');
            };
            // 接收消息事件
            socket.onmessage = function (event) {
                $('#messageList').append('<li>' + event.data + '</li>');
            };
            // 连接关闭事件,刷新页面
            socket.onclose = function (event) {
                location.reload();
            };
            // 发送消息
            window.sendMessage = function () {
                var message = $('#message').val();
                socket.send(message);
            }
        });
    </script>
</body>
</html>

在上面的代码中,我们使用了jQuery库来简化DOM操作,创建了一个WebSocket连接,并通过onopenonmessageonclose等事件来管理WebSocket的连接和消息收发。

示例1:简单的WebSocket连接测试

在浏览器中打开上面编写的前端页面,页面会显示出当前的连接状态。如果能够正常显示,说明WebSocket连接已经建立成功。

示例2:WebSocket消息收发测试

在浏览器控制台中输入以下代码:

var socket = new WebSocket('ws://' + window.location.host + '/chat');
socket.onopen = function (event) {
    socket.send('Hello World!');
};

然后在前端页面中输入任意消息,发送后就可以在控制台中收到来自服务端的回复消息了。这个时候,我们在控制台中执行以下代码可以关闭WebSocket连接:

socket.close();

至此,我们已经成功地完成了Spring Boot整合WebSocket实现即时通信聊天的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合websocket实现即时通信聊天 - Python技术站

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

相关文章

  • Win10重置后出现inaccessible boot device提示 Win10进系统无限重启解决办法

    Win10重置后出现inaccessible boot device提示 如果您在重置Windows 10操作系统后发现出现了“Inaccessible Boot Device”提示,这可能是由于系统某些关键文件已经损坏或丢失导致的。不用担心,下面是一些解决方法。 方法1:使用“自动修复” 启动Windows 10,并进入“高级选项”页面。 选择“故障排除”…

    other 2023年6月27日
    00
  • Altera Quartus II 15.0安装

    Altera Quartus II 15.0安装 Altera Quartus II是一款著名的FPGA开发工具,用于构建数字电路系统的设计和仿真。本文将介绍如何在Windows系统上安装Altera Quartus II 15.0版本。 安装前准备 在开始安装之前,您需要做好以下准备工作: 确保您的计算机符合Altera Quartus II 15.0的最…

    其他 2023年3月28日
    00
  • IMAIL系统修改IP地址的处理方法

    IMAIL系统修改IP地址的处理方法攻略 概述 IMAIL系统是一种用于电子邮件管理的系统,它允许用户发送和接收电子邮件。有时候,我们可能需要修改IMAIL系统中的IP地址,以确保系统能够正常运行。下面是修改IP地址的处理方法的详细攻略。 步骤 了解当前IP地址配置 在开始修改IP地址之前,我们需要了解当前的IP地址配置。可以通过以下步骤来获取当前IP地址配…

    other 2023年7月30日
    00
  • gitkraken使用—01、gitkraken的安装与破解

    下面是关于“GitKraken使用—01、GitKraken的安装与破解”的完整攻略: 1. GitKraken简介 GitKraken是一款跨平台的Git客户端,它提供了直观的用户界面和强大的功能,使得Git的使用变得更加简单和高效。 2. GitKraken安装与破解 以下是GitKraken的安装与破解步骤: 步骤1:下载GitKraken 首先,需要…

    other 2023年5月7日
    00
  • access数据库怎么调整两个字段的位置?

    在Access数据库中,若要调整两个字段的位置,可以采用以下步骤: 打开Access数据库,选择需要操作的数据表,进入“设计视图”。 在“设计视图”中,选中需要调整位置的一个字段,右键点击该字段,在弹出的菜单中选择“剪切”选项。 找到需要调整位置的字段前面或后面的位置,右键点击该位置,在弹出的菜单中选择“粘贴”选项。 如果需要同时调整多个字段的位置,可以按住…

    other 2023年6月25日
    00
  • C语言单链表遍历与求和示例解读

    C语言单链表遍历与求和示例解读是一个重要的程序开发技能,它能帮助程序员更好地理解链表的操作方法,并能有效完成链表求和等需求。下面,我们将从以下几个方面进行详细讲解。 1. 单链表的创建与初始化 在正式开始单链表遍历与求和的过程前,需要先创建并初始化单链表。一般而言,单链表的初始化主要包括链表的头节点初始化以及节点的申请和赋值。下面是单链表的创建示例代码: s…

    other 2023年6月27日
    00
  • nuxt 路由、过渡特效、中间件的实现代码

    Nuxt 路由、过渡特效、中间件的实现代码攻略 Nuxt.js 简介 Nuxt.js 是一个基于 Vue.js 的通用应用框架,它可以帮助我们快速构建服务器渲染的 Vue.js 应用。Nuxt.js 提供了一些内置功能,包括路由、过渡特效和中间件,使得开发过程更加简单和高效。 路由 Nuxt.js 使用 Vue Router 来实现路由功能。在 Nuxt.j…

    other 2023年7月28日
    00
  • 总结Bean的三种自定义初始化和销毁方法

    下面是详细讲解”总结Bean的三种自定义初始化和销毁方法”的完整攻略: 为Bean自定义初始化和销毁方法的三种方式 实现InitializingBean和DisposableBean接口: 可以通过实现Spring中的InitializingBean和DisposableBean接口,来自定义Bean的初始化和销毁方法。 示例代码如下: import org…

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部