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

重生之我在NestJS中使用EventStream

有一个需求是需要长连接等待后台的返回,我们使用的EventStream,在NestJS中使用很简单,框架基本上已经封装好了

0. 如果没有创建项目的,可以先创建一个项目,创建项目的直接跳转到下一个步骤去

  • 全局安装 nest: npm install @nestjs/cli global
  • 创建项目: nest new nest-demo-app

1. 在NestJS中的代码

app.constroller.ts 中新建一个方法,如下:

import { Observable } from 'rxjs';
import { Controller, Sse } from '@nestjs/common';@Controller()
class AppController {@Sse('test/event-stream') // 这个是访问的链接地址 http://localhost:3000/test/event-streamtestEventStream() {let count = 0;return new Observable(observer => {// 调用 observer.next() 这个方法向前端推送消息setInterval(() => {count++;observer.next({ data: new Date().toLocalTimeString() });}, 3000);// 调用 observer.complete() 这个方法,表示结束本次推送if (count > 5) {observer.complete();// 或者调用 observer.unsubscribe() 也可以结束推送}});}
}

2. 在前端调用这个接口

const stream = new EventSource('http://localhost:3000/test/event-stream')
let count = 0
stream.onopen = () => {console.log('连接打开');
}
stream.onmessage = e => {console.log(e.data); // 打印获取到的数据,也就是 NestJS 中 observer.next() 中发送的数据if (count++ >= 5) {stream.close(); // 主动关闭连接}
}
stream.onerror = e => {console.error(e); // 打印错误日志
}
stream.onclose = () => {console.log('连接关闭'); // 关闭连接 
}

注意:

  1. 前端在一个长连接完成之后,如果没有主动关闭连接,会一直发这个连接,所以在 message 中需要根据条件判断一下,主动关闭连接
http://www.lryc.cn/news/415971.html

相关文章:

  • 自动化工具Selenium IDE基本使用——脚本录制
  • 【第十一天】进程调度算法,进程间通信方式,进程同步和互斥
  • Python的lambda函数
  • java9-泛型
  • zotero安装与使用
  • Elasticsearch未授权访问漏洞
  • 【FPGA】module中CLOCK RESET iCall oDone的含义
  • OpenGL实现3D游戏编程【连载2】——了解并创建3D空间模型
  • Java-文件操作和IO
  • AI智能化赋能电商经济,守护消费净土,基于轻量级YOLOv8n开发构建公共生活景下的超大规模500余种商品商标logo智能化检测识别分析系统
  • C语言菜鸟入门·数据结构·链表超详细解析
  • C# Unity 面向对象补全计划 七大原则 之 依赖倒置原则 (DIP)难度:☆☆ 总结:多抽象,多接口,少耦合
  • 大模型面试问题
  • keeplive配置详解与haproxy配置详解
  • vivado里的LUT、LUTRAM、FF、BRAM、DSP、IO、BUFG、MMCM资源介绍
  • window关闭端口占用
  • Java:类和对象
  • Pandas数据分析案例之用户购买记录分析
  • 串口调试可能遇见的常见问题和排查方法
  • 运放学习提纲
  • nvidia系列教程-AGX-Orin系统刷机及备份
  • 将 Mojo 与 Python 结合使用
  • Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED
  • js与ios、安卓原生方法互调。
  • C++——多态经典案例(二)制作饮品
  • 内网域森林之ProxyNotShell漏洞利用
  • SpringBoot基础 第一天
  • 【C/C++】C语言和C++实现Stack(栈)对比
  • mysql定时备份脚本
  • 云原生 (1)