Spring Boot + WebSocket 实现 IM 即时通讯

2024-06-23 21:52

本文主要是介绍Spring Boot + WebSocket 实现 IM 即时通讯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 1. 项目环境准备
      • 2. 配置WebSocket
      • 3. 创建消息处理器
      • 4. 创建消息类
      • 5. 创建前端页面
      • 6. 启动应用并测试
      • 7. 分析与扩展
      • 结论

在这里插入图片描述

🎉欢迎来到SpringBoot框架学习专栏~


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:SpringBoot
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

即时通讯(IM)已经成为现代应用中不可或缺的一部分,从社交媒体到企业协作工具,无不依赖于IM技术来实现实时消息传递。本文将介绍如何使用Spring Boot和WebSocket实现一个简单的即时通讯系统。

在这里插入图片描述

1. 项目环境准备

首先,我们需要创建一个Spring Boot项目,并添加WebSocket的相关依赖。使用Spring Initializr创建项目时,选择如下依赖:

  • Spring Web
  • Spring WebSocket

也可以在pom.xml中手动添加:

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

2. 配置WebSocket

创建一个配置类,来启用WebSocket并设置消息端点:

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {@Overridepublic void configureMessageBroker(MessageBrokerRegistry config) {config.enableSimpleBroker("/topic");config.setApplicationDestinationPrefixes("/app");}@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {registry.addEndpoint("/chat").withSockJS();}
}

3. 创建消息处理器

接下来,我们需要创建一个控制器来处理WebSocket消息。创建一个新的控制器类:

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;
import org.springframework.web.util.HtmlUtils;@Controller
public class ChatController {@MessageMapping("/message")@SendTo("/topic/messages")public ChatMessage sendMessage(ChatMessage message) throws Exception {// 模拟处理时间Thread.sleep(1000);return new ChatMessage(HtmlUtils.htmlEscape(message.getContent()));}
}

4. 创建消息类

定义消息类来封装消息内容:

public class ChatMessage {private String content;public ChatMessage() {}public ChatMessage(String content) {this.content = content;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}
}

5. 创建前端页面

src/main/resources/static目录下创建一个HTML页面,作为前端聊天界面:

<!DOCTYPE html>
<html>
<head><title>Chat Room</title><script src="https://cdn.jsdelivr.net/npm/sockjs-client@1.4.0/dist/sockjs.min.js"></script><script src="https://cdn.jsdelivr.net/npm/stompjs@2.3.3/lib/stomp.min.js"></script><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body><h2>Chat Room</h2><div id="messages"></div><input type="text" id="message" placeholder="Type your message here..." autofocus/><button onclick="sendMessage()">Send</button><script>var stompClient = null;function connect() {var socket = new SockJS('/chat');stompClient = Stomp.over(socket);stompClient.connect({}, function (frame) {console.log('Connected: ' + frame);stompClient.subscribe('/topic/messages', function (message) {showMessage(JSON.parse(message.body).content);});});}function sendMessage() {var message = document.getElementById('message').value;stompClient.send("/app/message", {}, JSON.stringify({'content': message}));document.getElementById('message').value = '';}function showMessage(message) {$("#messages").append("<div>" + message + "</div>");}$(document).ready(function () {connect();});</script>
</body>
</html>

6. 启动应用并测试

启动Spring Boot应用,打开浏览器访问http://localhost:8080,你将看到一个简单的聊天室界面。打开多个浏览器窗口或标签页,可以在它们之间发送消息,验证即时通讯功能是否正常工作。

7. 分析与扩展

上述实现是一个简单的IM系统示例,实际应用中可能需要更多功能,如:

  • 用户身份验证:在实际应用中,用户需要先登录才能使用IM功能,可以集成Spring Security来实现用户身份验证。
  • 消息存储:将聊天记录存储到数据库,以便于后续查询和分析。
  • 群组聊天:除了单对单聊天,还可以实现群组聊天功能。
  • 文件传输:除了文本消息,还可以扩展支持文件传输、语音消息等。

结论

通过Spring Boot和WebSocket,可以快速构建一个高效的即时通讯系统。本文介绍了基本的配置和实现流程,并提供了一个简单的示例。在实际项目中,可以根据需求进一步扩展和优化。希望本文能够帮助你更好地理解和使用Spring Boot和WebSocket来实现IM功能。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

这篇关于Spring Boot + WebSocket 实现 IM 即时通讯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088376

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

SpringBoot整合OpenFeign的完整指南

《SpringBoot整合OpenFeign的完整指南》OpenFeign是由Netflix开发的一个声明式Web服务客户端,它使得编写HTTP客户端变得更加简单,本文为大家介绍了SpringBoot... 目录什么是OpenFeign环境准备创建 Spring Boot 项目添加依赖启用 OpenFeig

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1