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

相关文章

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1(错误经验) #include <iostream>#include <string>using namespace std;int main() {string s;string ret;int count = 0;while(cin >> s)for(auto a : s){if(count == 0){if( a <=

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因