前后端实时数据通信

news/2024/7/10 23:00:35 标签: javascript, es6, edge

实现前后端实时数据转换通常涉及到以下几个步骤:

  1. 后端提供数据转换接口。

  2. 前端实时数据获取。

  3. 前端实时数据转换。

  4. 前端实时展示转换后数据。

以下是一个简单的例子,假设后端提供了一个接口来转换某种数据格式,前端使用JavaScript和WebSocket实现实时数据转换。

后端接口(Python示例使用Flask):

javascript">from flask import Flask, request, jsonify
 
app = Flask(__name__)
 
@app.route('/convert_data', methods=['POST'])
def convert_data():
    # 获取数据并转换
    data = request.json['data']
    # 假设这里有数据转换逻辑
    converted_data = perform_data_conversion(data)
    return jsonify({'converted_data': converted_data})
 
def perform_data_conversion(data):
    # 转换逻辑
    return data  # 假设是转换数据,实际应用中会有更复杂的逻辑
 
if __name__ == '__main__':
    app.run(debug=True)

前端实现(JavaScript使用WebSocket):

javascript">


// 假设WebSocket服务地址为 'ws://localhost:5000/convert_data'

const socket = new WebSocket('ws://localhost:5000/convert_data');

// 收到服务器发送的消息时触发

socket.onmessage = function(event) {

const response = JSON.parse(event.data);

// 处理转换后的数据

console.log(response.converted_data);

};

// 发送需要转换的数据

socket.onopen = function() {

socket.send(JSON.stringify({ data: "Some data to convert" }));

};

简单前端使用WebSocket与后端建立实时通信,发送需要转换的数据,并接收转换后的数据。实际应用中,你可能需要处理连接断开和重连的逻辑,以及错误处理等。

1具体实现添加依赖到你的pom.xml

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

2配置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 {
    
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws").withSockJS();
    }
 
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/app");
    }
}

3创建WebSocket控制器:

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;
 
@Controller
public class WebSocketController {
 
    @MessageMapping("/convertData")
    @SendTo("/topic/convertedData")
    public String convertData(String data) {
        // 这里实现数据转换逻辑
        String convertedData = convertDataLogic(data);
        return convertedData;
    }
 
    private String convertDataLogic(String data) {
        // 转换逻辑
        return "Converted " + data;
    }
}

4前端使用WebSocket:

javascript">const socket = new WebSocket('ws://' + window.location.host + '/ws');
socket.onopen = function(event) {
  console.log('WebSocket connected');
};
 
socket.onmessage = function(event) {
  console.log('Received message: ' + event.data);
};
 
function sendData() {
  const data = document.getElementById('data-to-send').value;
  socket.send(JSON.stringify({
    destination: '/app/convertData',
    content: data
  }));
}

5确保前端订阅了转换后数据的topic

javascript">socket.send(JSON.stringify({
  destination: '/user/queue/convertedData',
  disconnectDelay: 5000
}));

前端发送一个消息到/app/convertData,后端的WebSocketController接收这个消息,执行数据转换逻辑,并通过@SendTo注解发送转换后的数据到/topic/convertedData。前端订阅了这个topic,以便接收实时转换后的数据。


http://www.niftyadmin.cn/n/5451772.html

相关文章

javaWeb饮食分享平台

一、简介 随着人们生活水平的提高和健康意识的增强&#xff0c;饮食已经成为了日常生活中一个备受关注的话题。为了满足人们对于健康饮食的需求&#xff0c;我们设计并开发了一款基于 JavaWeb 的饮食分享平台。本平台旨在为用户提供丰富的饮食资讯、美食菜谱、个人笔记分享等功…

KG-MTL

知识图谱和多任务学习预测DTI和CPI&#xff0c;代码&#xff1a;KG-MTL &#xff08;源代码的基础上下载一下项目中提到的 DRKG 数据集&#xff0c;加几个文件夹&#xff0c;微调一下细节可用跑起来&#xff09;&#xff0c;原文&#xff1a;KG-MTL: Knowledge Graph Enhanced …

YOLOv9改进策略:上采样涨点系列 | 超轻量高效动态上采样DySample,效果秒杀CAFFE,助力小目标检测

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文独家改进&#xff1a;一种超轻量高效动态上采样DySample&#xff0c; 具有更少的参数、FLOPs&#xff0c;效果秒杀CAFFE和YOLOv9网络中的nn.Upsample &#x1f4a1;&#x1f4a1;&#x1f4a1;在多个数据集下验证能够涨点&#xff…

二叉树:递归算法的理解和运用

上一期中&#xff0c;我们了解到了堆&#xff0c;堆的结构也可以叫做二叉树的顺序结构&#xff0c;今天我们一起来看看二叉树的链式结构&#xff0c;我们还要学习有关于二叉树递归的书写。 首先&#xff0c;这是一个二叉树&#xff0c;但是对于普通的二叉树来说&#xff0c;增…

PyQt-QtWidgets-QFileDialog

文章目录 1.打开文件对话框2.保存文件对话框3.选择文件夹对话框4.多文件选择5.设置过滤器和默认目录 1.打开文件对话框 QFileDialog.getOpenFileName 方法的输出结果是一个元组&#xff0c;包含两个元素&#xff1a; 第一个元素是用户选择的文件的路径&#xff08;如果用户取消…

Verilog 仿真可视化

DigitalJS 是一个基于 JavaScript 实现的开源数字电路模拟器&#xff0c;旨在模拟由硬件设计工具&#xff08;如 Yosys&#xff09;合成的电路。由弗罗茨瓦夫大学的Marek Materzok开发&#xff0c;源文件托管于 Github 上。 DigitalJS 的开源网址如下&#xff1a;https://gith…

pdf压缩文件怎么压缩最小?一键压缩PDF

pdf文件压缩是为了减小文件大小&#xff0c;以便更轻松地共享、传输和存储文件&#xff0c;通过压缩pdf文件&#xff0c;可以减少文件占用的存储空间&#xff0c;加快文件的上传和下载速度&#xff0c;并节省带宽和存储成本;在本教程中&#xff0c;我们将介绍一些有效的方法来最…

【兆易创新GD32H759I-EVAL开发板】 关于LVGL 的内存配置

【兆易创新GD32H759I-EVAL开发板】拥有外部32MB的 SDRAM 在使用LVGL时 可以随意分配大小 但是我们也应该明白 所定义的内存大小的 的一些概念 LVGL中 有单独的 定义 LV_MEM_SIZE 定义内存大小 LVLG 中 在定义 显示程序 接口时 还需要用到 lv_disp_draw_buf_init() 分配显存…