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

vue3接收SSE流数据进行实时渲染日志

后端使用的是 Spring Boot WebFlux(响应式编程框架),并且返回的是 Server-Sent Events (SSE) 流式数据,那么在 Vue3 中,需要使用 EventSource API 或 fetch + 流式读取 来正确获取响应内容。

方案 1:使用 EventSource(推荐,兼容 SSE 标准)

如果你的后端返回的是标准的 SSE 数据流(Content-Type: text/event-stream),可以直接用浏览器原生的 EventSource 监听数据:

前端代码(Vue3 Composition API)

<script setup>
import { onMounted, onUnmounted, ref } from "vue";const logContent = ref('') // 存储日志内容
const logContainer = ref(null)
const error = ref(null)
let eventSource = null// 对后端返回的数据做换行
const formattedText = computed(() => {return logContent.value.replace(/#n/g, '\n')
})
// 封装连接 SSE 的逻辑
const connectToLogStream = () => {eventSource = new EventSource('/api/algWebflux/getLog')eventSource.onmessage = (event) => {// 新内容追加到已有内容下方,并转换 #n 为换行符logContent.value += event.data.replace(/#n/g, '\n') + '\n\n'// 自动滚动到底部scrollToBottom()eventSource.onerror = (err) => {console.error('SSE error:', err)// 5秒后自动重连setTimeout(connectSSE, 5000)}}eventSource.onerror = (err) => {error.value = '日志流连接失败'console.error('SSE Error:', err)}
}const scrollToBottom = () => {nextTick(() => {if (logContainer.value) { // 确保元素存在logContainer.value.scrollTop = logContainer.value.scrollHeight}})
}// 组件挂载时调用
onMounted(() => {connectToLogStream()
});// 组件卸载时关闭连接
onUnmounted(() => {if (eventSource) eventSource.close()
})
</script>

如果代码中调用接口写成这种方式报错跨域错误(如 No 'Access-Control-Allow-Origin' header

  eventSource = new EventSource('http://192.168.14.231:5400/algWebflux/getLog')

那就需要在 vite.config.js 中配置

export default defineConfig({server: {proxy: {'/api': {target: 'http://192.168.14.231:5400',changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, '')}}}
})

然后前端请求 /api/algWebflux/getLog

最后在页面进行渲染就可以了

<div class="text-container">{{ formattedText }}</div>

http://www.dtcms.com/a/318883.html

相关文章:

  • Web开发模式 前端渲染 后端渲染 身份认证
  • 第三章:【springboot】框架介绍MyBatis
  • Spring AOP动态代理核心原理深度解析 - 图解+实战揭秘Java代理设计模式
  • 前端百分比展示导致后端 BigDecimal 转换异常的排查与解决
  • 多账号管理方案:解析一款免Root的App分身工具
  • 【RabbitMQ面试精讲 Day 13】HAProxy与负载均衡配置
  • HTTP 协议升级(HTTP Upgrade)机制
  • winform中的listbox实现拖拽功能
  • 基于ubuntu搭建gitlab
  • KDE Connect
  • 一篇文章入门TCP与UDP(保姆级别)
  • 02电气设计-安全继电器电路设计(让电路等级达到P4的安全等级)
  • C语言strncmp函数详解:安全比较字符串的实用工具
  • 合约收款方式,转账与问题安全
  • 怎么进行专项分析项目?
  • 上证50期权持仓明细在哪里查询?
  • C语言(08)——整数浮点数在内存中的存储
  • LINUX-批量文件管理及vim文件编辑器
  • 浅析 Berachain v2 ,对原有 PoL 机制进行了哪些升级?
  • AutoMQ-Kafka的替代方案实战
  • JAVA第六学:数组的使用
  • 【C++】哈希表原理与实现详解
  • 基于langchain的两个实际应用:[MCP多服务器聊天系统]和[解析PDF文档的RAG问答]
  • 智能制造的中枢神经工控机在自动化产线中的关键角色
  • 行业应用案例:MCP在不同垂直领域的落地实践
  • 二叉树算法之【中序遍历】
  • OpenAI重磅发布:GPT最新开源大模型gpt-oss系列全面解析
  • SpringBoot请求重定向目标地址不正确问题分析排查
  • 六类注定烂尾的甲方软件外包必看!这类甲方不要理-优雅草卓伊凡
  • 上门家教 app 用户端系统模块设计