Java实战:Spring Boot实现WebSocket实时通信

news/发布时间2024/5/15 3:02:46

本文将详细介绍如何在Spring Boot应用程序中实现WebSocket实时通信。我们将探讨WebSocket的基本概念,以及如何使用Spring Boot和Spring WebSocket模块来实现WebSocket服务器和客户端。此外,我们将通过具体的示例来展示如何在Spring Boot应用程序中配置和使用WebSocket,以及如何实现实时消息传递和群发消息等功能。本文适合希望使用WebSocket技术实现实时通信的Spring Boot开发者阅读。

一、引言

在现代Web应用程序中,实时通信是一个关键需求,用于实现即时消息传递、在线聊天、实时数据同步等功能。WebSocket是一种网络通信协议,它提供了一种全双工通信渠道,允许服务器和客户端之间进行实时数据交换。Spring Boot提供了一种简便的方式来集成WebSocket技术,以实现实时通信功能。本文将介绍如何在Spring Boot应用程序中实现WebSocket实时通信。

二、WebSocket的基本概念

1. 什么是WebSocket?
WebSocket是一种网络通信协议,它提供了一种全双工通信渠道,允许服务器和客户端之间进行实时数据交换。WebSocket协议基于TCP协议,通过WebSocket连接,服务器和客户端可以相互发送消息,实现实时通信。
2. WebSocket的特点

  • 全双工通信:WebSocket协议支持服务器和客户端之间的全双工通信,客户端和服务器可以同时发送消息。
  • 持久连接:WebSocket连接一旦建立,将持续保持打开状态,直到客户端或服务器关闭连接。
  • 跨域通信:WebSocket协议支持跨域通信,允许不同域的服务器与客户端建立连接。

三、在Spring Boot中实现WebSocket实时通信

1. 添加Spring WebSocket依赖
在项目的pom.xml文件中,添加Spring Boot的Spring WebSocket依赖:

<dependencies><!-- Spring Boot Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot WebSocket依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>
</dependencies>

2. 创建WebSocket配置类
创建一个WebSocket配置类,用于配置WebSocket服务器端点。以下是一个简单的WebSocket配置类示例:

package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.*;
@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("/websocket-endpoint").withSockJS();}
}

在上面的代码中,我们创建了一个名为WebSocketConfig的配置类,它实现了WebSocketMessageBrokerConfigurer接口。这个类用于配置WebSocket消息代理和注册STOMP(Simple Text Oriented Messaging Protocol)端点。
3. 创建消息模型
创建一个简单的消息模型类,用于表示WebSocket消息。以下是一个简单的消息模型类示例:

package com.example.demo.model;
public class Message {private String content;private String sender;// getter和setter方法
}

在上面的代码中,我们创建了一个名为Message的模型类,它包含两个属性:contentsender
4. 创建消息处理器
创建一个消息处理器类,用于处理WebSocket消息。以下是一个简单的消息处理器类示例:

package com.example.demo.handler;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo
import org.springframework.stereotype.Controller;
@Controller
public class MessageHandler {@MessageMapping("/send")@SendTo("/topic/messages")public Message sendMessage(Message message) {return new Message("Hello, WebSocket!", "System");}
}

在上面的代码中,我们创建了一个名为MessageHandler的控制器类,它包含一个名为sendMessage的方法。这个方法将处理发送到/send目的地的消息,并将消息发送到/topic/messages主题。
5. 创建前端代码
创建一个简单的HTML页面和JavaScript代码,用于连接到WebSocket服务器并发送消息。以下是一个简单的HTML页面示例:

<!DOCTYPE html>
<html>
<head><title>WebSocket Demo</title><script src="https://cdn.jsdelivr.net/npm/sockjs-client/dist/sockjs.min.js"></script><script src="https://cdn.jsdelivr.net/npm/stompjs/lib/stomp.min.js"></script>
</head>
<body><div><input type="text" id="messageInput" placeholder="Type a message..."><button onclick="sendMessage()">Send</button></div><ul id="messagesList"></ul><script>var socket = new SockJS('/websocket-endpoint');var stompClient = Stomp.over(socket);stompClient.connect({}, function (frame) {stompClient.subscribe('/topic/messages', function (message) {var messagesList = document.getElementById('messagesList');var listItem = document.createElement('li');listItem.textContent = message.body;messagesList.appendChild(listItem);});});function sendMessage() {var messageInput = document.getElementById('messageInput');stompClient.send('/app/send', {}, messageInput.value);messageInput.value = '';}</script>
</body>
</html>

在上面的代码中,我们创建了一个简单的HTML页面,包含一个输入框和一个按钮。当用户点击按钮时,JavaScript代码会连接到WebSocket服务器,并订阅/topic/messages主题。当服务器发送消息到该主题时,JavaScript代码会将消息添加到页面上的消息列表。

四、实现实时消息传递和群发消息

1. 实时消息传递
要实现实时消息传递,我们可以在MessageHandler类中创建一个方法,用于接收并处理从客户端发送的消息。以下是一个实现实时消息传递的示例:

package com.example.demo.handler;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;
@Controller
public class MessageHandler {// 省略其他代码@MessageMapping("/receive")@SendTo("/topic/messages")public Message receiveMessage(Message message) {return new Message("Received your message: " + message.getContent(), "System");}
}

在上面的代码中,我们添加了一个名为receiveMessage的方法,用于接收并处理发送到/receive目的地的消息。这个方法会将接收到的消息发送到/topic/messages主题。
2. 群发消息
要实现群发消息,我们可以在WebSocketConfig类中配置一个广播代理。以下是一个实现群发消息的示例:

package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.*;
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {// 省略其他代码@Overridepublic void configureMessageBroker(MessageBrokerRegistry config) {config.enableSimpleBroker("/topic");config.setApplicationDestinationPrefixes("/app");config.setBrokerDeliveryMode(MessageBrokerRegistry.BrokerDeliveryMode.BROADCASTING);}// 省略其他代码
}

在上面的代码中,我们通过将setBrokerDeliveryMode方法的参数设置为BROADCASTING来启用广播代理。这意味着所有发送到/topic/messages主题的消息都会被广播到所有连接的客户端。

五、总结

本文详细介绍了如何在Spring Boot应用程序中实现WebSocket实时通信。我们首先了解了WebSocket的基本概念和特点,然后学习了如何使用Spring Boot和Spring WebSocket模块来实现WebSocket服务器和客户端。我们还通过具体的示例展示了如何在Spring Boot应用程序中配置和使用WebSocket,以及如何实现实时消息传递和群发消息等功能。
通过本文,您应该已经掌握了如何使用Spring Boot实现WebSocket实时通信。您学会了如何添加Spring WebSocket依赖、创建WebSocket配置类、创建消息模型、创建消息处理器,以及如何实现实时消息传递和群发消息。希望本文能够帮助您在开发Spring Boot应用程序时更加得心应手。如果您有任何疑问或建议,请随时留言交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/IKEK/9784.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

微信为什么使用 SQLite 保存聊天记录?

SQLite 是一个被大家低估的数据库&#xff0c;但有些人认为它是一个不适合生产环境使用的玩具数据库。事实上&#xff0c;SQLite 是一个非常可靠的数据库&#xff0c;它可以处理 TB 级的数据&#xff0c;但它没有网络层。接下来&#xff0c;本文将与大家共同探讨 SQLite 在过去…

房贷计算器微信小程序原生语言

微信小程序: 房贷计算器 效果: 输入 300万 结果 还款明细 一共有3个页面 1、输入页面 2、结果页面 3、详情页面 1 index页面 index.wxml文件 <view class="text-black"><!--房屋总价--><view class="cu-bar bg-white solid-bottom"&…

ZABBIX修改web界面的 “支持“,“帮助”,“Integrations“。等菜单按钮,百试百灵,删除修改Help,Support菜单

♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ **ZABBIX修改web界面的 “支持”&#xff0c;“帮助”,“Integrations”。等菜单按钮&#xff0c…

十三、Qt多线程与线程安全

一、多线程程序 QThread类提供了管理线程的方法&#xff1a;一个对象管理一个线程一般从QThread继承一个自定义类&#xff0c;重载run函数 1、实现程序 &#xff08;1&#xff09;创建项目&#xff0c;基于QDialog &#xff08;2&#xff09;添加类&#xff0c;修改基于QThr…

提升智能客服机器人的语义理解能力:理解用户的语义和意图

智能客服机器人的发展已经成为现代服务业的一大亮点。它们不仅能够提供724小时不间断的服务&#xff0c;而且能够处理大量的用户请求&#xff0c;大大提高了服务效率。然而&#xff0c;尽管智能客服机器人的技术已经取得了显著的进步&#xff0c;但其语义理解能力仍有待提高。为…

Crawler爬虫基础知识

本来其实不知道爬虫的意义的&#xff0c;但是发现爬虫在信息收集的那一方面好像挺重要&#xff01;&#xff01; 那么就来浅学一下吧&#xff01;&#xff01;&#xff01; 1.基本的储备 对于爬虫&#xff0c;我们一般都是用的python去编写脚本 &#xff0c;其中还要导入…

阿里云启动实例进入了急救模式解决办法

相关文档 问题描述 通过远程连接软件无法登录Linux实例&#xff0c;通过使用管理终端连接Linux实例远程连接时&#xff0c;发现系统进入到急救模式&#xff08;emergency mode&#xff09;&#xff0c;且出现报错。 CentOS实例报如下错误。 systemctl default to try again…

模拟算法题练习(一)

模拟算法介绍&#xff1a; 模拟算法通过模拟实际情况来解决问题&#xff0c;一般容易理解但是实现起来比较复杂&#xff0c;有很多需要注意的细节&#xff0c;或者是一些所谓很“麻模“的东西。 模拟题一般不涉及太难的算法&#xff0c;一般就是由较多的简单但是不好处理的部…

Java——建造者模式(Builder)

建造者模式&#xff08;Builder&#xff09; 1、建造者模式的定义 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 Builder模式是一步一步创建一个复杂对象的创建型模式&#xff0c;它允许使用者在不知道内部建造细节的情况下&…

Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审…

【计算机】本科考研还是就业?

其实现在很多计算机专业的学生考研&#xff0c;也是无奈的选择 技术发展日新月异&#xff0c;而在本科阶段&#xff0c;大家学着落后的技术&#xff0c;出来找工作自然会碰壁。而且现在用人单位的门槛越来越高&#xff0c;学历默认研究生起步&#xff0c;面试一般都是三轮起步…

Linux 下安装Jupyter

pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 启动&#xff1a; python3 -m jupyter lab 2.安装朱皮特 pip3 install -i https://pypi.douban.com/simpl…

安卓开发1- android stdio环境搭建

安卓开发1-android stdio环境搭建 Jdk环境搭建 1. 准备Jdk,这边已经准备好了jdk1.8.0,该文件直接使用即可 2. 系统变量添加 %JAVA_HOME%\bin JAVA_HOME 3. 系统变量&#xff0c;Path路径添加 4. 添加完成后&#xff0c;输入命令javac / java -version&#xff0c;验证环…

初学者如何使用QT新建一个包含UI界面的C++项目

文章目录 一、下载并安装QT51、下载安装包2、注册/登录账号3、安装qt6 二、新建QT Widget项目1、新建项目并且运行2、易错点&#xff1a;可能运行成功得到UI界面但是会报错&#xff08;原因是使用了中文路径&#xff09; 一、下载并安装QT5 1、下载安装包 进入下载网址 Windo…

DOM 创建节点、添加节点和删除节点

创建元素节点 document.createElement(‘标签名’) 创建文本节点document.createTextNode ( 内容 ) 根据传入的标签名创建出一个空的元素对象创建出来的默认不显示&#xff0c;要成为别人的子元素才能显示&#xff0c;所以要结合appendChild使用 添加节点&#xff08;后面&am…

使用sunshine和moonlight实现远程游戏串流

过年回家想要打游戏&#xff0c;但是苦于家里没有电脑&#xff0c;又没办法把电脑搬回去&#xff0c;于是想到了使用串流的方式。 实现串流的软件有多种&#xff1a; moonlight。因为仅实现了 NVIDIA 的游戏串流协议&#xff0c;所以只支持 N 卡。Steam Link。支持 steam 的游…

Flutter Text 下划线

IntrinsicWidth(child: Column(mainAxisAlignment:MainAxisAlignment.center,children: [Text("工单名称",style: TextStyle(overflow: TextOverflow.fade,color: AppColors.baseColor,fontSize: 15.sp,// decorationStyle: TextDecorationStyle.dashed),),Container…

Win11系统安装安卓子系统教程

随着Win11系统的不断普及&#xff0c;以及硬件设备的更新换代&#xff0c;我相信很多同学都已经更新并使用到了最新的Win11系统。那么&#xff0c;Win11系统最受期待的功能“Windows Subsystem for Android”&#xff08;简称WSA&#xff09;&#xff0c;即《安卓子系统》。他可…

【MATLAB】MVMD_ MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 MVMD_MFE_SVM_LSTM神经网络时序预测算法结合了多变量多尺度分解&#xff08;MVMD&#xff09;、多尺度特征提取&#xff08;MFE&#xff09;、支持向量机&#xff08;SVM&#xff09;和长…

(vue)复合型输入框el-input输入数字类型,e,+,-等特殊符号可以输入

(vue)复合型输入框el-input输入数字类型&#xff0c;e&#xff0c;&#xff0c;-等特殊符号可以输入 效果 代码 <el-form-item label"分数区间"><el-inputplaceholder"请输入内容"v-model.number"formInline.scoreIntervalValue"clas…
推荐文章