有一个需求是需要长连接等待后台的返回,我们使用的
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()classAppController{
@Sse('test/event-stream')// 这个是访问的链接地址 http://localhost:3000/test/event-streamtestEventStream(){let count =0;returnnewObservable(observer=>{// 调用 observer.next() 这个方法向前端推送消息setInterval(()=>{
count++;
observer.next({data:newDate().toLocalTimeString()});},3000);// 调用 observer.complete() 这个方法,表示结束本次推送if(count >5){
observer.complete();// 或者调用 observer.unsubscribe() 也可以结束推送}});}}
2. 在前端调用这个接口
const stream =newEventSource('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('连接关闭');// 关闭连接 }
注意:
- 前端在一个长连接完成之后,如果没有主动关闭连接,会一直发这个连接,所以在 message 中需要根据条件判断一下,主动关闭连接
标签:
javascript
前端
本文转载自: https://blog.csdn.net/xfjpeter/article/details/140816545
版权归原作者 潇洒哥GG 所有, 如有侵权,请联系我们删除。
版权归原作者 潇洒哥GG 所有, 如有侵权,请联系我们删除。