用ps软件做ppt模板下载网站有哪些内容网站开发图书管理系统报告摘要

张小明 2026/1/11 12:19:21
用ps软件做ppt模板下载网站有哪些内容,网站开发图书管理系统报告摘要,基础建设基金有哪些,网站空间支持下载但不能下载文件用 microsoft/fetch-event-source 实现可靠的 SSE 对话流#xff1a;从原理到封装实践 在构建现代 AI 对话应用时#xff0c;流式响应#xff08;Streaming Response#xff09; 已成为提升用户体验的关键能力——用户不再需要等待数秒才能看到完整回答#xff0c;而是像…用microsoft/fetch-event-source实现可靠的 SSE 对话流从原理到封装实践在构建现代 AI 对话应用时流式响应Streaming Response已成为提升用户体验的关键能力——用户不再需要等待数秒才能看到完整回答而是像真人聊天一样“逐字输出”。而实现这一能力的核心技术之一就是SSEServer-Sent Events。本文将带你深入理解 SSE并分享我们在实际项目中如何基于microsoft/fetch-event-source封装一个健壮、可复用的 SSE 请求工具解决原生EventSource的诸多痛点。1. SSE 是什么SSEServer-Sent Events是一种基于 HTTP 的单向通信协议允许服务器主动向浏览器客户端推送实时数据。与 WebSocket 不同SSE 是单工通信仅服务端 → 客户端且基于标准 HTTP/HTTPS天然支持 CORS、缓存、代理等 Web 基础设施。一个典型的 SSE 响应格式如下HTTP/1.1 200 OK Content-Type: text/event-stream Connection: keep-alive Cache-Control: no-cache data: {content: 你好} data: {content: 世界} event: done data: {status: complete}每条消息以data:开头可选带event:类型。浏览器通过监听message或自定义事件名来处理数据。在大模型对话场景中后端会将生成的 token 逐个通过data: {...}推送给前端前端拼接后实时渲染从而实现“打字机”效果。2. 原生EventSource有什么缺陷虽然浏览器提供了原生EventSourceAPI 来处理 SSE但在实际项目中我们发现它存在几个致命短板❌ 无法发送 POST 请求或带 body 的请求EventSource构造函数只接受 URL不支持自定义 method、headers 或 request body。这意味着你无法在请求体中传递对话历史messages设置AuthorizationToken发送 JSON 格式的参数虽然可通过 URL query 传参但长度受限且不安全完全无法满足 LLM 对话的复杂入参需求。❌ 错误处理机制薄弱EventSource只提供简单的onerror回调无法区分是网络错误、服务端业务错误如配额超限还是流内容本身的异常。❌ 无法精细控制连接生命周期比如无法在请求发出前 abort或在特定条件下重连策略不可控。❌ 不支持流式 JSON 解析的上下文管理你需要手动拼接data字段、处理换行、解析 JSON容易出错。这些限制使得原生EventSource几乎无法用于生产级的 AI 对话流场景。3. 为什么选择microsoft/fetch-event-source经过调研多个开源方案如event-source-polyfill、sse.js等我们最终选定Microsoft 官方出品的microsoft/fetch-event-source原因如下✅基于fetch实现天然支持 POST、自定义 headers、request body✅完全兼容 SSE 协议正确解析data:、event:、id:、retry:等字段✅提供 AbortController 支持可随时取消请求✅支持自定义 onopen/onmessage/onerror/onclose 钩子便于集成业务逻辑✅TypeScript 友好官方提供类型定义✅轻量无依赖仅 ~5KB无第三方依赖更重要的是它模拟了EventSource的行为但底层使用fetch ReadableStream完美绕过了原生 API 的限制。4. 封装microsoft/fetch-event-source打造项目级 SSE 工具为了在团队中统一使用、降低接入成本我们对fetchEventSource进行了二次封装目标是支持标准 JSON 请求体自动处理流式 JSON chunk提供成功/运行中/错误三种状态回调支持取消请求兼容 BFF 层错误与 SSE 内容错误封装代码TypeScript// sse.tsimport{fetchEventSource}frommicrosoft/fetch-event-source;classFetchBffErrorextendsError{constructor(message:string){super(message);this.nameFetchBffError;}}constisJSON(str:string):boolean{try{JSON.parse(str);returntrue;}catch{returnfalse;}};exportinterfaceSSEOptions{url:string;data:Recordstring,any;headers?:Recordstring,string;cb:(chunk:any|null,status:running|success)void;onError?:(error:{type:BFF_ERROR|SSE_ERROR;message:string})void;}exportfunctioncreateSSEStream({url,data,headers{},cb,onError,}:SSEOptions){constcontrollernewAbortController();fetchEventSource(url,{method:POST,headers:{Content-Type:application/json,Accept:text/event-stream;charsetUTF-8,...headers,},body:JSON.stringify(data),signal:controller.signal,openWhenHidden:true,// 处理非流式错误如 BFF 返回 JSON 错误asynconopen(response){if(response.headers.get(content-type)?.includes(application/json)){constreaderresponse.body?.getReader();if(reader){const{value}awaitreader.read();consttextnewTextDecoder().decode(value);if(isJSON(text)){constjsonJSON.parse(text);if(json.codejson.code!200){onError?.({type:BFF_ERROR,message:json.message||请求失败});controller.abort();}}}}},// 处理流式消息onmessage(msg){if(msg.dataisJSON(msg.data)){constchunkJSON.parse(msg.data);// 这里可根据实际后端格式提取 content例如 OpenAI 格式// const content chunk.choices?.[0]?.delta?.content;cb(chunk,running);}},onclose(){cb(null,success);// 流结束},onerror(err){if(!err.message?.includes(aborted)){onError?.({type:BFF_ERROR,message:err.message||连接异常});}throwerr;// 阻止自动重连},});return{cancel:()controller.abort(),};}使用示例// 在 React 组件中使用useEffect((){conststreamcreateSSEStream({url:/api/chat/completions,data:{model:qwen-max,messages:[{role:user,content:天空为什么是蓝的}],stream:true,},headers:{Authorization:Bearer${token},},cb:(chunk,status){if(statusrunningchunk){constcontentchunk.choices?.[0]?.delta?.content;setContent(prevprev(content||));}},onError:(err){console.error(对话流错误:,err);toast.error(err.message);},});return(){stream.cancel();// 组件卸载时取消请求};},[]);结语SSE 是实现 AI 对话流式体验的轻量级利器而microsoft/fetch-event-source则解决了原生 API 的关键缺陷。通过合理封装我们不仅能获得灵活的请求能力还能统一错误处理、状态管理和生命周期控制。在我们的项目中这套方案已稳定支撑日均百万级的对话流请求兼具性能与可维护性。附相关链接fetch-event-source GitHubMDN: Server-sent eventsOpenAI Streaming Guide
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

聊城网站建设方案莆田网站制作设计

深度解析prompt-optimizer性能优化:Vue3架构实战与监控体系 【免费下载链接】prompt-optimizer 一款提示词优化器,助力于编写高质量的提示词 项目地址: https://gitcode.com/GitHub_Trending/pro/prompt-optimizer 在当今AI应用快速发展的时代&am…

张小明 2026/1/9 12:33:23 网站建设

网站主办者和所有者区别页游和做网站

技术融合背景云原生与VMware的协同价值:探讨传统虚拟化与容器化、微服务的互补性,分析企业混合云场景下的技术需求。核心技术与架构VMware Tanzu产品线解析:包括Tanzu Kubernetes Grid(TKG)、Tanzu Application Servic…

张小明 2026/1/9 12:33:21 网站建设

网站建设小江无锡网站建设外贸

在当今数字化工作环境中,Mac用户经常面临窗口管理的挑战。当你需要同时处理文档、代码编辑和设计任务时,不透明的窗口就像一面面墙壁,阻碍了你的工作效率和视觉流畅性。Loop作为一款专业的MacOS窗口管理工具,其透明度快捷键功能正…

张小明 2026/1/9 15:07:04 网站建设

网站内容运营是什么网站规划与建设与安全管理

ChromePass密码找回工具:轻松获取Chrome保存的所有密码 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 你是否曾经遇到过这样的情况:在Chrome浏览器中保…

张小明 2026/1/9 15:07:02 网站建设

wordpress商品列表对比插件seo网站推广培训

我是怎么画架构图的?不懂 ZooKeeper?没关系,这一篇给你讲的明明白白 亿级流量下的高可用实践:携程门票秒杀架构如何设计?HashedWheelTimer时间轮原理分析JavaGuide

张小明 2026/1/9 15:07:01 网站建设

内衣网站建设推广盐城做网站哪家好

在数字化时代,语言障碍常常成为信息获取的瓶颈。无论是观看外语视频、玩国际游戏还是浏览外文网站,实时翻译工具都显得尤为重要。Translumo作为一款先进的实时屏幕翻译软件,能够智能识别并翻译屏幕上的任意文字内容,为用户提供无缝…

张小明 2026/1/9 15:06:59 网站建设