教程 > nest.js 中文教程 > 阅读:334

nest.js server-ag捕鱼王app官网

server-sent 事件 (sse) 是一种服务器推送技术,使客户端能够通过 http 连接从服务器接收自动更新。 每个通知都作为由一对换行符终止的文本块发送。

使用

要在路由(在控制器类中注册的路由)上启用 server-sent 事件,请使用 @sse() 装饰器注解方法处理程序。

@sse('sse')
sse(): observable {
  return interval(1000).pipe(map((_) => ({ data: { hello: 'world' } })));
}

提示 :@sse() 装饰器和 messageevent 接口是从 @nestjs/common 导入的,而 observable、interval 和 map 是从 rxjs 包中导入的。

警告 : server-sent 事件路由必须返回一个 observable 流。

在上面的示例中,我们定义了一个名为 sse 的路由,它将允许我们发送实时更新。 可以使用 eventsource api 监听这些事件。

sse 方法返回一个发出多个 messageevent 的 observable(在此示例中,它每秒发出一个新的 messageevent)。 messageevent 对象应遵循以下接口以匹配规范:

export interface messageevent {
  data: string | object;
  id?: string;
  type?: string;
  retry?: number;
}

有了这个,我们现在可以在我们的客户端应用程序中创建 eventsource 类的实例,将 /sse 路由(它与我们传递给上面的 @sse() 装饰器的端点匹配)作为构造函数参数传递。

eventsource 实例打开与 http 服务器的持久连接,该服务器以文本/事件流格式发送事件。 连接保持打开状态,直到通过调用 eventsource.close() 关闭。

一旦打开连接,来自服务器的传入消息就会以事件的形式传递给我们的代码。 如果传入消息中有事件字段,则触发的事件与事件字段值相同。 如果不存在事件字段,则触发通用消息事件。

const eventsource = new eventsource('/sse');
eventsource.onmessage = ({ data }) => {
  console.log('new message', json.parse(data));
};

查看笔记

扫码一下
查看教程更方便
网站地图