通过Node + SSE 做了一个构建日志推送

本文介绍了如何利用SSE(Server-Sent Events)技术,结合Node.js进行实时构建日志推送。讨论了SSE与其他交互方式的区别,详细阐述了后端和前端的实现过程,包括建立SSE连接、执行打包命令、消息推送等关键步骤。同时,文章还提到了兼容性和相关API的使用。
摘要由CSDN通过智能技术生成

SSE 是什么?

SSE 全称是 Server Sent Event,翻译过来的意思就是 服务器派发事件。

一个网页获取新的数据通常需要发送一个请求到服务器,也就是向服务器请求的页面。

使用 server-sent 事件,服务器可以在任何时刻向我们的 Web 页面推送数据和信息。

这些被推送进来的信息可以在这个页面上作为 Events [0] + data 的形式来处理。

白话篇

SSE 的本质其实就是一个 HTTP 的长连接,只不过它给客户端发送的不是一次性的数据包,而是一个 stream 流,格式为 text/event-stream。

所以客户端不会关闭连接,会一直等着服务器发过来的新的数据流63228564f9f60e5a4e135c7b14b4c64d.png

98ad066d286279459d987e9b6ea69473.png

SSE 与其他交互方式的区别

b1095e4c18ba06166f211c034082fbc3.png
交互示意图

SSE 与 WS 有什么区别?

方式 协议 交互通道 内容编码 重连 事件类型 总结
SSE HTTP 服务端单向推送 默认文本 默认支持断线重连 支持自定义消息类型 轻量级
WebSocket WS(基于 TCP 传输层的应用层协议,RFC6455  [1] 对于它的定义标准) 双向推送 默认二进制 手动实现 NO 扩展性、功能性强大

TCP/IP 五层模型

1884726c7b52e305a2ce19a2fbc006f7.png

SSE 兼容性

API

c06fe8f3db201806049a8d95358c7029.png

f31cad8b41bc0eace45666f10b5898c9.png

40fe2883fde0e771bd6f573ed45c617f.png

23626ec2e71aed7035519822c5863591.png

NestJS一个用于构建高效、可扩展的Node.js服务器端应用程序的开发框架。它提供了一组强大的工具和模块,使得开发者可以快速构建可维护、可测试的应用程序。 在NestJS中,使用SSE(Server-Sent Events)来实现服务器向客户端推送事件。SSE是一种基于HTTP的轻量级协议,允许服务器向客户端推送事件,而无需客户端发送请求。 在NestJS中使用SSE非常简单,只需要在控制器中返回一个EventSource对象即可,如下所示: ``` import { Controller, Get } from '@nestjs/common'; @Controller() export class AppController { @Get('events') events(): any { const eventSource = new EventSource('/stream'); return { eventSource }; } } ``` 上面的代码创建了一个/events路由,当客户端访问该路由时,将返回一个包含EventSource对象的响应。客户端可以使用EventSource对象来监听服务器推送的事件。 接下来,我们需要创建一个/stream路由,用于向客户端推送事件。可以使用NestJS提供的@EventPattern装饰器来实现该功能,如下所示: ``` import { Controller, Get } from '@nestjs/common'; import { EventPattern } from '@nestjs/microservices'; @Controller() export class AppController { @Get('events') events(): any { const eventSource = new EventSource('/stream'); return { eventSource }; } @EventPattern('newMessage') async handleNewMessage(data: any) { const message = JSON.stringify(data); const event = `data: ${message}\n\n`; eventSource.write(event); } } ``` 上面的代码中,@EventPattern('newMessage')装饰器表示该方法会处理名为newMessage的事件。在handleNewMessage方法中,我们将接收到的数据转换为字符串,并通过eventSource对象向客户端推送事件。 相关问题: 1. SSE和WebSocket有什么区别? 2. 在NestJS中如何处理WebSocket连接? 3. 如何在NestJS中处理异步事件?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值