当前位置: 首页 > news >正文

Spring Boot 实现 WebSocket(注解方式)

本文介绍如何使用 Spring Boot 的注解方式实现一个简单的 WebSocket 服务,支持客户端与服务器之间进行实时通信。

1. 引入依赖

在 pom.xml 文件中添加 WebSocket 相关依赖。

<dependencies><!-- Spring Boot WebSocket 支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>
</dependencies>

2.创建 WebSocket 服务类

使用 @ServerEndpoint 注解定义 WebSocket 的处理逻辑。下面是一个简单的示例类,它处理客户端连接、消息接收和消息发送。

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;@Component
@ServerEndpoint("/ws")
public class WebSocketServer {// 用于存储所有的会话private static final CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<>();private Session session;// 连接建立成功调用的方法@OnOpenpublic void onOpen(Session session) {this.session = session;webSocketSet.add(this);System.out.println("新连接加入: " + session.getId());}// 连接关闭时调用的方法@OnClosepublic void onClose() {webSocketSet.remove(this);System.out.println("连接关闭: " + session.getId());}// 收到客户端消息时调用的方法@OnMessagepublic void onMessage(String message, Session session) {System.out.println("收到消息: " + message);broadcast("服务器: " + message);  // 广播消息给所有客户端}// 发送消息给客户端private void sendMessage(String message) throws IOException {this.session.getBasicRemote().sendText(message);}// 广播消息给所有客户端private static void broadcast(String message) {for (WebSocketServer webSocket : webSocketSet) {try {webSocket.sendMessage(message);} catch (IOException e) {e.printStackTrace();}}}
}

3. WebSocket 配置类

在 Spring Boot 中,需要通过配置类注册 WebSocket 端点。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;@Configuration
public class WebSocketConfig {// 自动注册使用 @ServerEndpoint 注解声明的 WebSocket 端点public ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}
}

4. 编写前端客户端代码

为了测试 WebSocket 服务,可以通过一个简单的 HTML 文件与 WebSocket 服务进行交互。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>WebSocket Test</title>
</head>
<body><h2>WebSocket 测试</h2><input id="messageInput" type="text" placeholder="输入消息"><button onclick="sendMessage()">发送</button><ul id="messages"></ul><script>let socket = new WebSocket("ws://localhost:8080/ws");socket.onmessage = function(event) {let messages = document.getElementById("messages");let messageItem = document.createElement("li");messageItem.textContent = event.data;messages.appendChild(messageItem);};function sendMessage() {let input = document.getElementById("messageInput");let message = input.value;socket.send(message);input.value = '';}</script>
</body>
</html>

5. 启动应用程序

完成以上步骤后,启动 Spring Boot 应用程序。WebSocket 服务将会运行在 ws://localhost:8080/ws,前端可以通过该地址与服务器进行实时通信。

6. 测试 WebSocket

启动应用程序后,打开前端 HTML 页面。
输入消息并点击发送按钮,服务器会收到消息并将其广播给所有连接的客户端。
在浏览器开发工具中也可以观察到 WebSocket 的实时消息交互。

http://www.lryc.cn/news/466578.html

相关文章:

  • windows下Qt的安装方法
  • 嵌入式面试题 ARM常见面试题
  • 分布式调度器--Spring Task 的使用
  • Java应用程序的测试覆盖率之设计与实现(四)-- jacoco-maven-plugin
  • UI 提供的 progress-step 要怎么实现?
  • DBSwitch和Seatunel
  • 【日志】力扣刷题 -- 轮转数组
  • Java 项目 Dockerfile 示例:从基础镜像选择到环境变量配置的详细指南
  • WebGL编程指南 - 高级变换与动画基础
  • 银行客户贷款行为数据挖掘与分析
  • 制程质量管理方案设计
  • uniapp移动端优惠券! 附源码!!!!
  • 【分布式技术】中间件-zookeeper安装配置
  • 高等数学 7.6高阶线性微分方程
  • LSP的建立
  • huggingface的数据集下载(linux下clone)
  • Java使用dom4j生成kml(xml)文件遇到No such namespace prefix: xxx is in scope on:问题解决
  • 深入探讨Java中的LongAdder:使用技巧与避坑指南
  • 【本科毕业设计】基于单片机的智能家居防火防盗报警系统
  • C语言 动态数据结构的C语言实现单向链表-2
  • Github 2024-10-23C开源项目日报 Top10
  • ubuntu20.04 opencv4.0 /usr/local/lib/libgflags.a(gflags.cc.o): relocation报错解决
  • android openGL ES详解——混合
  • 计网--物理层
  • 算法的学习笔记—数组中的逆序对(牛客JZ51)
  • Golang | Leetcode Golang题解之第498题对角线遍历
  • 什么是全局污染?怎么避免全局污染?
  • C# 串口通信教程
  • PHP编程基础
  • TwinCAT3下位机配置EAP通讯传递与接收变量