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

springboot 3 websocket react 系统提示,选手实时数据更新监控

构建一个基于 Spring Boot 3 和 WebSocket 的实时数据监控系统,并在前端使用 React,可以实现选手实时数据的更新和展示功能。以下是该系统的核心设计和实现思路:

1. 系统架构

后端 (Spring Boot 3):

提供 WebSocket 服务端,处理客户端连接和消息推送。
提供 REST API,用于初始数据加载和历史数据查询。
实现逻辑:接收选手的实时数据,并通过 WebSocket 推送到前端。

前端 (React):

使用 WebSocket 客户端与后端连接。
使用状态管理工具(如 Redux 或 Context)管理选手数据。
动态渲染选手的实时数据(例如通过表格、图表或地图)。

2. 后端实现

pom.xml 加入依赖

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

配置 Spring Boot WebSocket

package com.ys.conf.socket;import com.ys.constant.ApiConstant;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;/*** @author kong*/
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(new RealTimeDataHandler(), ApiConstant.API_OPEN + "/realtime").setAllowedOrigins("*");}
}

WebSocket 处理逻辑

package com.ys.conf.socket;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.io.IOException;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;/*** @author kong*/
@Component
@Slf4j
public class RealTimeDataHandler extends TextWebSocketHandler {private static final List<WebSocketSession> SESSIONS = new CopyOnWriteArrayList<>();@Overridepublic void afterConnectionEstablished(WebSocketSession session) {SESSIONS.add(session);}@Overridepublic void handleTextMessage(WebSocketSession session, TextMessage message) {// 收到消息(如客户端订阅某选手数据)log.info("Received: {}", message.getPayload());}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) {SESSIONS.remove(session);}public void sendData(String data) throws IOException {for (WebSocketSession session : SESSIONS) {if (session.isOpen()) {session.sendMessage(new TextMessage(data));}}}
}

数据推送逻辑

后端通过定时任务或事件触发将实时数据推送给所有客户端:

package com.ys.conf.socket;import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.io.IOException;/*** @author kong*/
@Component
@RequiredArgsConstructor
@Slf4j
public class RealTimeDataPusher {private final RealTimeDataHandler dataHandler;@Scheduled(fixedRate = 1000)public void pushData() {try {log.info("每秒推送");String data = generateRealTimeData();dataHandler.sendData(data);} catch (IOException e) {log.error(e.getMessage(), e);}}private String generateRealTimeData() {// 模拟生成实时数据return "{\"player\": \"Player1\", \"score\": " + (int) (Math.random() * 100) + "}";}
}

3. 前端实现

WebSocket 客户端连接

import { useEffect, useState } from "react";const useWebSocket = (url) => {const [data, setData] = useState(null);useEffect(() => {const socket = new WebSocket(url);socket.onopen = () => {console.log("WebSocket connection established");};socket.onmessage = (event) => {setData(JSON.parse(event.data));};socket.onclose = () => {console.log("WebSocket connection closed");};return () => {socket.close();};}, [url]);return data;
};export default useWebSocket;

数据展示组件 useWebSocket.jsx

import React from "react";
import useWebSocket from "./useWebSocket";const RealTimeMonitor = () => {const data = useWebSocket("ws://localhost:8080/realtime");return (<div><h1>实时数据监控</h1>{data ? (<div><p>选手: {data.player}</p><p>得分: {data.score}</p></div>) : (<p>等待数据...</p>)}</div>);
};export default RealTimeMonitor;

4. 补充功能

选手列表展示:

后端提供选手列表 API,前端通过 REST 请求加载并渲染选手信息。

历史数据查询:

实现后端数据库(如 MySQL)存储历史数据,提供查询接口。

图表展示:

使用图表库(如 chart.js 或 echarts)动态展示数据变化趋势。

性能优化:

后端分组推送,减少不必要的数据广播。
前端优化:仅更新受影响的 UI 部分。

运行环境

确保安装 Java 17 和 Node.js 16+。
使用 Spring Boot 3.0+ 和 React 18+。

这样,一个简单完整的实时数据监控系统就实现了!

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

相关文章:

  • 现代图形API综合比较:Vulkan DirectX Metal WebGPU
  • 【Hot100刷题计划】Day04 栈专题 1~3天回顾(持续更新)
  • 用VBA将word文档处理成支持弹出式注释的epub文档可用的html内容
  • 舵机原理介绍 简洁讲解面向实战 非阻塞式驱动代码, arduino
  • Oracle Database 23ai 中的DBMS_HCHECK
  • 如何利用AWS监听存储桶并上传到tg bot
  • STM32 SPI读取SD卡
  • TANGO与LabVIEW控制系统集成
  • eth_type_trans 函数
  • 派克汉尼汾推出新的快换接头产品系列,扩展热管理解决方案
  • uniapp 前端解决精度丢失的问题 (后端返回分布式id)
  • C语言:指针4(常量指针和指针常量及动态内存分配)
  • Win11提示fveapi.dll丢失是什么原因?fveapi.dll丢失怎么办?
  • 台球助教平台系统开发APP和小程序信息收藏功能需求解析(第十二章)
  • 如何设计 Vue 3 组件库:高效的组件化开发方法
  • 第八节、Bresenham直线插补运动【51单片机-L298N-步进电机教程】
  • 一个从oracle使用spool导出数据到kadb的脚本
  • 【STM32】GPIO口以及EXTI外部中断
  • Confluent Cloud Kafka 可观测性最佳实践
  • 【LeetCode每日一题】——415.字符串相加
  • linux---使用定时任务同步时间
  • Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit
  • KNN分类算法 HNUST【数据分析技术】(2025)
  • AI Agent开源框架汇总(持续更新)
  • 录播检测原理是什么?
  • IndexOf Apache Web For Liunx索引服务器部署及应用
  • MySQL索引为什么是B+树
  • ffmpeg之播放一个yuv视频
  • 《2023-2024网络安全产业发展核心洞察与趋势预测》
  • 为什么环境影响评价导则中生态环境评价中的【植被类型图】制作比较难?制作流程是什么