EventSource 长链接执行

2024-01-27 11:52
文章标签 执行 链接 eventsource

本文主要是介绍EventSource 长链接执行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

EventSource 说明文档MDN
其他参考文档

一、利用node启服务

import fs  from 'fs'
import express  from 'express'
const app = express()
// eventSource 仅支持 get 方法
// 服务器端发送的数据必须是纯文本格式,不能是二进制数据。
app.get('/api', (req, res) => {res.writeHead(200, {'Content-Type': 'text/event-stream','Connection': 'close','Access-Control-Allow-Origin': 'http://127.0.0.1:5172', // vue 项目启的服务,允许跨域ip'Access-Control-Allow-Credentials': 'true',})const data = fs.readFileSync('./src/service/index.text', 'utf8')console.log('=data===', data)const total = data.lengthlet current = 0// 定时器模拟持续发送消息,如果消息流一但断开就不会重新链接let time = setInterval(() => {console.log(current, total)if (current >= total) {console.log('end')clearInterval(time)return}// 返回自定义事件名// res.write(`event:lol\n`)// 返回数据// res.write(`data:${data.split('')[current]}\n\n`)/*** 自定义事件需要 如:event:事件名\n 格式* 写入数据 需要  如:data:流\n\n 格式,注意是两个 \n* 写入的 流 最好是JSON 类型的字符串,因如果读取的内容中有 \r 或者 \n 时候会导致 后面的内容无法写入;* */ res.write(`data:${JSON.stringify({data: data})}\n\n`)current++}, 300)
})app.listen(3000, () => {console.log('listen on port 3000')
})

特别说明:
1、服务端 需要设置 ‘Content-Type’: ‘text/event-stream’
2、如果是vue 项目需要自己补充允许跨域的 ip 或域名,否则前端调用会跨域
3、eventSource:仅支持 get方法,且服务端发送的是纯文本,不能是二进制流(会耗费大量内存,得不偿失)
4、node express 其他内容参考如下:express官网

二、前端vue 项目

文件路径如下:
在这里插入图片描述
如启动node 服务:node ./src/service/nodeService.js
启动vue 项目 自行 看package.json

<template><div>This is a EventSource dome</div>
</template><script setup>
import { onMounted } from 'vue'
const connectEventSource = () => {const sse = new EventSource('http://127.0.0.1:3000/api')sse.addEventListener('message', (mes) => {// 服务端未自定义事件时候,默认走messageconsole.log('==message==', mes, mes.data ? JSON.parse(mes.data).data : '5555'
)})sse.addEventListener('open', (e) => {console.log('===,', e)})//对应后端nodejs自定义的事件名lol;有此自定义事件名时候,不会走message
sse.addEventListener('lol', (e) => {console.log('---lol-',e)
})
}
onMounted(() => {connectEventSource()
})
</script>

注意事项
1、前端需要再 proxy 中配置跨域代理服务信息
如:

server: {origin: `http://localhost:${PORT}`,host: 'localhost',port: PORT,strictPort: true, // 设为 true 时若端口已被占用则会直接退出,而不是尝试下一个可用端口。open: true,proxy: {'/api/': {target: 'http://127.0.0.1:3000',changeOrigin: true,rewrite:(path) => path.replace(RegExp(`^api`), '/api')}}},

2、

这篇关于EventSource 长链接执行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/650167

相关文章

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

Spring Bean初始化及@PostConstruc执行顺序示例详解

《SpringBean初始化及@PostConstruc执行顺序示例详解》本文给大家介绍SpringBean初始化及@PostConstruc执行顺序,本文通过实例代码给大家介绍的非常详细,对大家的... 目录1. Bean初始化执行顺序2. 成员变量初始化顺序2.1 普通Java类(非Spring环境)(

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用