返回

NestJs 使用 SSE 实现实时单向信息提醒发送和物流信息对接

后端

一、SSE(Server-Sent Events)

SSE(Server-Sent Events)是 HTML5 中的 API,用于在服务器和客户端之间实时推送数据流。SSE 不依赖于特定的传输协议,可通过 HTTP 进行传输,也可以通过 WebSocket 进行传输。

SSE 的工作原理很简单:服务器端通过 SSE 接口将数据发送给客户端,客户端通过 JavaScript 监听 SSE 接口,并对收到的数据进行处理。SSE 接口的特点是单向的,即服务器端只能向客户端发送数据,而客户端不能向服务器端发送数据。

二、SSE 在 NestJs 中的应用

在 NestJs 中,我们可以使用 @nestjs/sse 包来实现 SSE。首先,我们需要在 NestJs 项目中安装 @nestjs/sse 包:

npm install @nestjs/sse

安装完成后,我们在 NestJs 项目中创建一个 SSE 模块,并使用 SseModule 来注册 SSE 模块:

import { Module } from '@nestjs/common';
import { SseModule } from '@nestjs/sse';

@Module({
  imports: [SseModule],
})
export class SseExampleModule {}

三、NestJs 中使用 SSE 实现单向消息提醒发送

接下来,我们就可以在 NestJs 项目中使用 SSE 来实现单向消息提醒发送。首先,我们需要创建一个控制器,并在控制器中定义一个 SSE 接口。例如,我们可以创建一个 MessageController 控制器:

import { Controller, Get, Sse } from '@nestjs/common';
import { Observable, interval } from 'rxjs';

@Controller('message')
export class MessageController {
  @Sse('messages')
  getMessage(): Observable<string> {
    return interval(1000).pipe(map(() => 'Hello, world!'));
  }
}

MessageController 中,我们定义了一个 getMessage() 方法,并使用 @Sse() 装饰器来将其标记为 SSE 接口。@Sse() 装饰器接受一个参数,即 SSE 接口的名称。在 getMessage() 方法中,我们使用 interval() 方法创建了一个可观测对象,该可观测对象每隔 1 秒钟就会发出一个字符串 "Hello, world!"

四、NestJs 中使用 SSE 实现物流信息对接

最后,我们还可以使用 SSE 来实现物流信息对接。物流信息对接需要服务器端和客户端之间实时交换数据,而 SSE 恰好可以满足这一需求。例如,我们可以创建一个 LogisticsController 控制器:

import { Controller, Get, Sse } from '@nestjs/common';
import { Observable, interval } from 'rxjs';

@Controller('logistics')
export class LogisticsController {
  @Sse('logistics-info')
  getLogisticsInfo(): Observable<string> {
    return interval(1000).pipe(map(() => '物流信息已更新'));
  }
}

LogisticsController 中,我们定义了一个 getLogisticsInfo() 方法,并使用 @Sse() 装饰器来将其标记为 SSE 接口。@Sse() 装饰器接受一个参数,即 SSE 接口的名称。在 getLogisticsInfo() 方法中,我们使用 interval() 方法创建了一个可观测对象,该可观测对象每隔 1 秒钟就会发出一个字符串 "物流信息已更新"

五、总结

通过以上四个部分的讲解,我们已经了解了如何在 NestJs 中使用 SSE 来实现实时单向信息提醒发送和物流信息对接。SSE 是一种简单易用的技术,可以帮助我们轻松实现实时数据推送。