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

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.lryc.cn/news/496333.html

相关文章:

  • SpringBoot 在线家具商城:设计考量与实现细节聚焦
  • 每日速记10道java面试题07
  • 前端面试热门题(二)[html\css\js\node\vue)
  • mvc基础及搭建一个静态网站
  • AOSP的同步问题
  • HarmonyOS4+NEXT星河版入门与项目实战(23)------实现手机游戏摇杆功能
  • Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计)
  • Vue文字转语音实现
  • Docker快速部署RabbitMq
  • glog在vs2022 hello world中使用
  • [241129] Docker Desktop 4.36 发布:企业级管理功能、WSL 2 增强 | Smile v4.0.0 发布
  • CentOS使用chrony服务进行时间同步源设置脚本
  • Git仓库迁移到远程仓库(源码、分支、提交)
  • 【算法刷题指南】优先级队列
  • 使用pymupdf提取PDF文档中的文字和其颜色
  • 贪心算法题
  • Python 3 教程第33篇(MySQL - mysql-connector 驱动)
  • 23种设计模式之外观模式
  • GateWay使用手册
  • MySQL1.0
  • IDEA使用HotSwapHelper进行热部署
  • 简单web项目自定义部署Dockerfile
  • 基础Web安全|SQL注入
  • SpringBoot -拦截器Interceptor、过滤器 Filter 及设置
  • C++小问题
  • avcodec_alloc_context3,avcodec_open2,avcodec_free_context,avcodec_close
  • 强化学习的几个主要方法(策略梯度、PPO、REINFORCE实现等)(下)
  • 计算机网络:IP协议详细讲解
  • 2024信创数据库TOP30之华为Gauss DB
  • 在线家具商城基于 SpringBoot:设计模式与实现方法探究