【node-express-sse】Server Sent Event 单向推送消息,实现站内信功能

sse

  • 实现效果
  • 代码
    • 前端
    • 后端

实现效果

服务端返回的 Content-Type 是 text/event-stream,这是一个流,可以多次返回内容。
Sever Sent Event 就是通过这种消息来随时推送数据。
AIGC,如 ChatGPT 打字机消息回复实现原理 等也是使用sse实现。
还有站内信,或者一些日志推送,相较于繁重的 WebSockets,SSE 无疑是 H5 简单即时数据更新的轻量级代替方案。

源码:https://github.com/thinkasany/nestjs-course-code/tree/master/sse

在这里插入图片描述

代码

前端

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>React App</title>
</head>
<body><div id="root"></div><script crossorigin src="https://unpkg.com/@babel/standalone/babel.min.js"></script><script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script><script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script><script type="text/babel">function App() {const [messages, setMessages] = React.useState([]);React.useEffect(() => {const eventSource = new EventSource('http://localhost:3001/stream');eventSource.onmessage = ({ data }) => {const newData = JSON.parse(data).msg.split('\n').filter(str => str.trim() !== '');// console.log('New message', newData);setMessages(newData);};return () => {eventSource.close();};}, []);return (<div><ul>{messages.map((message, index) => (<li key={index}>{message}</li>))}</ul></div>);};ReactDOM.render(<App />, document.getElementById('root'));</script>
</body>
</html>

后端

const { exec } = require("child_process");
const { Observable } = require("rxjs");const getLogChange = async (req, res) => {const childProcess = exec("tail -f ./log");res.setHeader("Content-Type", "text/event-stream");res.setHeader("Cache-Control", "no-cache");res.setHeader("Connection", "keep-alive");const observer = msg => {res.write(`data: ${JSON.stringify({ msg: msg.toString() })}\n\n`);};const observable = new Observable(obs => {childProcess.stdout.on("data", msg => {obs.next(msg);});});const subscription = observable.subscribe(observer);// 当连接断开时,停止子进程和 Observablereq.on("close", () => {childProcess.kill();subscription.unsubscribe();});
};module.exports = {getLogChange
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/315861.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓在SOA中的运用

安卓在运用SOA研发的过程中&#xff0c;会针对实际情况对研发的架构和流程进行优化&#xff0c;通过优化过的架构和实施方案&#xff0c;不仅可以大大提升了整车开发的效率和灵活行以及功能落地的稳定性&#xff0c;同时也增加了系统的向上兼容性。 目前基于车载SOA系统的研发…

软件游戏缺失XINPUT1_3.dll怎么安装,马上教会你

当我们打开某个软件或游戏时&#xff0c;系统提示“XINPUT1_3.dll丢失”怎么办&#xff0c;XINPUT1_3.dll是一个动态链接库文件&#xff0c;它包含了许多用于处理输入设备的函数。当计算机丢失这个文件时&#xff0c;一些依赖于它的应用程序可能无法正常运行&#xff0c;导致输…

实践:基于双向LSTM模型完成文本分类任务

目录 1 数据处理 1.1 数据加载 1.2 构造Dataset类 1.3 封装DataLoader 2 模型构建 3 模型训练 4 模型评价 5 模型预测 5 拓展实验 5.1 使用Pytorch内置的单向LSTM进行文本分类实验 ​编辑 5.2 使用Paddle内置的单向LSTM进行文本分类实验 总结 电影评论可以蕴含…

打印菱形和金字塔类型(总结)

首先&#xff0c;在之前的学习中&#xff0c;我们了解了菱形的打印&#xff0c;今天我们来对金字塔和菱形这类打印图形的问题&#xff0c;我们来做一个总结。 这个总结的来源是这今天做了一道题 这道题的答案如下 这个题做起来并不难&#xff0c;拓展到这类问题中&#xff0c;…

Axure软件大全:原型设计下载与学习指南!

Axure可以有效地创建原型&#xff0c;包括绘制APP和网页的原型图、框架图、结构图等。Axure内置的小部件可以用来构建动态交互。即使新手设计师不懂程序代码&#xff0c;也可以在Axure中创建复杂、动态、功能丰富的原型。对于想要深入研究和花时间学习程序的设计师来说&#xf…

深入解析云原生与Kubernetes:现代化应用开发的未来

云原生是一种创新的软件开发和部署方法论&#xff0c;旨在使应用程序能够更好地适应云环境的特性和需求。而Kubernetes作为云原生的核心技术&#xff0c;提供了强大的容器编排和管理能力&#xff0c;改变了应用部署和运行的方式。本文将深入探讨云原生和Kubernetes的概念、原理…

Elasticsearch:带有自查询检索器的聊天机器人示例

本工作簿演示了 Elasticsearch 的自查询检索器 (self-query retriever) 将问题转换为结构化查询并将结构化查询应用于 Elasticsearch 索引的示例。 在开始之前&#xff0c;我们首先使用 langchain 将文档分割成块&#xff0c;然后使用 ElasticsearchStore.from_documents 创建…

【基础】【Python网络爬虫】【1.认识爬虫】什么是爬虫,爬虫分类,爬虫可以做什么

Python网络爬虫基础 认识爬虫1.什么是爬虫2.爬虫可以做什么3.为什么用 Ptyhon 爬虫4.爬虫的分类通用爬虫聚焦爬虫功能爬虫增量式爬虫分布式爬虫 5.爬虫的矛与盾&#xff08;重点&#xff09;6.盗亦有道的君子协议robots7.爬虫合法性探究 认识爬虫 1.什么是爬虫 网络爬虫&…

Go(Golang)的10个常见代码片段用于各种任务

探索有用的Go编程代码片段 提供“前10名”Go&#xff08;Golang&#xff09;代码片段的明确列表是具有挑战性的&#xff0c;因为代码片段的实用性取决于您试图解决的具体问题。然而&#xff0c;我可以为您提供十个常用的Go代码片段&#xff0c;涵盖了各种任务和概念&#xff1…

基于PI控制的PMSM永磁同步电机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PMSM数学模型 4.2 矢量控制策略 4.3 PI控制器设计 4.4 控制系统实现 5.完整工程文件 1.课题概述 基于PI控制的PMSM永磁同步电机控制系统simulink建模与仿真。其中&#xff0c;基于PI&#xff08;…

Python爬虫-爬取当日中药材价格数据

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;喜欢的话麻烦您点个&#x1f44d;和⭐&#xff01; &#x1f388;…

Pix2Seq 算法阅读记录

目录 前向传播过程 训练过程&#xff1a; 网络结构 前向传播过程 batch_preds--> tgt-->tgtcat(tgt, padding)-->tgt_embedding-->tgt_mask,tgt_padding_mask 以NLP的角度&#xff0c;tgt 代表了 词汇表的长度&#xff0c;encoder部分直接对图像进行处理&#…