当前位置: 首页 > article >正文

GPT打字机效果—— fetchEventSouce进行sse流式请求

EventStream基本用法
与 WebSocket 不同的是,服务器发送事件是单向的。数据消息只能从服务端到发送到客户端(如用户的浏览器)。这使其成为不需要从客户端往服务器发送消息的情况下的最佳选择。

const evtSource = new EventSource(“/api/v1/sse”)
// 每次连接开启时调用
evtSource.onopen = function () {
console.log(“连接开始启动”);
};
// 每次接受数据时调用
evtSource.onmessage = (e) => {
console.log(‘输入每次接受的数据’,e)
};
// 每次连接发生错误时调用
evtSource.onerror = function () {
console.log(“连接发生错误”);
};

需要注意的是,EventSource是以get方式发送请求,对于post请求原生的EventSource是无法实现的

如何用post的方式进行eventSource请求
常见的是通过@microsoft/fetch-event-source 这个库里的fetchEventSource来实现
import { fetchEventSource } from ‘@microsoft/fetch-event-source’;
这个库封装了一个方法,使得我们可以便捷的通过这个方法直接进行调用
以下是具体的代码

const [controller, setController] = useState(new AbortController());
const url = ‘http:xxx’;
fetchEventSource(url, {
method: ‘POST’,
headers: {
// SYSTEM_PORTAL_TYPE: ‘LINGXI_RUNNING’,
‘Content-Type’: ‘text/event-stream’,
‘X-CSRF-TOKEN’: ‘1232123’,
// Cookies: 'ZSMART_LOCALE=zh; ',
},
mode: ‘cors’,
openWhenHidden: true,
credentials: ‘include’,
signal: controller?.signal,
onmessage: async (event: any) => {
console.log(‘eventeventeventeventeventevent’);
console.log(event);
},
onerror(err: any) {
console.log(‘err’, err);
},
async onopen(response: any) {
if (response.ok) {
console.log(‘开始建立连接’);
}
},
onclose() {
console.log(‘关闭’);
controller?.abort();
setController(new AbortController());
throw new Error();
},
}).catch((err: any) => {
controller?.abort();
setController(new AbortController());
console.log({ err });
throw new Error(err);
});


http://www.kler.cn/a/416560.html

相关文章:

  • 实时数据开发|Flink如何实现不同数据源输入--DataSource模块
  • pytest+allure生成报告显示loading和404
  • .net XSSFWorkbook 读取/写入 指定单元格的内容
  • mp4视频流推送的学习
  • 《C++助力无监督学习:挖掘数据潜在结构的高效之道》
  • 算法与数据结构练习——异或
  • Oracle LinuxR7安装Oracle 12.2 RAC集群实施(DNS解析)
  • 【大数据学习 | Spark-SQL】定义UDF和DUAF,UDTF函数
  • 使用Java来构筑一个基础的项目完全梳理(二):前端vue搭建
  • SpringBoot小知识(3):热部署知识
  • LLM - 使用 LLaMA-Factory 微调 Qwen2-VL DPO(LoRA) 图像数据集 教程 (3)
  • 力扣 最长回文字串-5
  • EXCEL截取某一列从第一个字符开始到特定字符结束的字符串到新的一列
  • Websocket——化神篇
  • 解决 PyTorch Upsample 属性错误:方法与最佳实践
  • 在并发情况下,Elasticsearch如果保证读写一致?
  • redis中的哨兵
  • vue3.0 根据富文本html页面生成压缩包(含视频在线地址、图片在线地址、前端截图、前端文档)
  • NeurIPS 2024 有效投稿达 15,671 篇,数据集版块内容丰富
  • MySQL 性能:基准测试工具包(BMK-kit)
  • Java开发工程师最新面试题库系列——Java基础部分(附答案)
  • 深入浅出:开发者如何快速上手Web3生态系统
  • C++调用QML函数的两种方法
  • 计算机毕业设计Python+LSTM天气预测系统 AI大模型问答 vue.js 可视化大屏 机器学习 深度学习 Hadoop Spark
  • C++基础:muduo库学习记录
  • 格网法计算平面点云面积(matlab版本)