当前位置:首页 > 科技  > 软件

一个SSE(流式)接口引发的问题

来源: 责编: 时间:2024-02-29 14:41:37 283观看
导读前言最近我们公司也是在做认知助手,大模型相关的功能,正在做提示词,机器人对话相关功能。想要提高用户体验,使用SSE请求模式,在不等数据完全拿到的情况下边拿边返回。之前做过一版,但不是流式返回,是等待全部结果再返回,不得

前言

最近我们公司也是在做认知助手,大模型相关的功能,正在做提示词,机器人对话相关功能。想要提高用户体验,使用SSE请求模式,在不等数据完全拿到的情况下边拿边返回。0O528资讯网——每日最新资讯28at.com

之前做过一版,但不是流式返回,是等待全部结果再返回,不得不说确实等待过程挺长,然后就有了现在的优化。想着功能都写好了,只是改一下接口,应该是个简单的需求。0O528资讯网——每日最新资讯28at.com

后端使用的post接口,经过一番搜索,最后使用的fetch。经过短短几个小时,配置写好,准备联调,以为需求就顺利完工了。奈何就这流式联调,还耗了两天。只因为后端在postman上测试时正常的,然后前端在本地连调就是无法获取分段式数据,拿到的总是一整块数据。表现成这样,我们就开始纠结前端配置是否有误,网关转发是否有误。0O528资讯网——每日最新资讯28at.com

就这样前端也试了好几种方式去发请求,奈何结果都一样。想着先测其他部分,这个接口最后测试。意外的是部署在线上的环境竟然能正常接收流式接口!!!那问题可能就是本地与部署线上的区别了,今天主要记录一下使用的配置。0O528资讯网——每日最新资讯28at.com

EventSource

创建EventSource对象:首先,使用new EventSource()构造函数创建一个EventSource对象。该对象将用于与服务器建立连接并接收服务器发送的事件流。0O528资讯网——每日最新资讯28at.com

var eventSource = new EventSource('sse_url');

在上面的代码中,将'sse_url'替换为实际的SSE请求URL。2. 监听事件:使用EventSource对象的onmessage事件监听器来接收服务器发送的事件数据。当接收到数据时,事件处理函数将被调用,并可以通过事件对象的data属性访问数据。0O528资讯网——每日最新资讯28at.com

eventSource.onmessage = function(event) {    console.log('Received data:', event.data);  };

错误处理:为了处理可能发生的错误,可以使用EventSource对象的onerror事件监听器。当发生错误时,可以在事件处理函数中进行处理。0O528资讯网——每日最新资讯28at.com

eventSource.onerror = function(error) {    console.error('SSE error:', error);  };

关闭连接:当不再需要接收事件流时,可以使用EventSource对象的close方法关闭连接。0O528资讯网——每日最新资讯28at.com

eventSource.close();

完整的示例代码如下所示:0O528资讯网——每日最新资讯28at.com

var eventSource = new EventSource('sse_url');    eventSource.onmessage = function(event) {    console.log('Received data:', event.data);  };    eventSource.onerror = function(error) {    console.error('SSE error:', error);  };

但是EventSource只支持get请求,配置请求头也不太友好。0O528资讯网——每日最新资讯28at.com

fetch

async function getStream() {  try {    let response = await fetch('url');    if (!response.ok) {      throw new Error('Network response was not ok');    }       const reader = response.body.getReader();    const textDecoder = new TextDecoder();    let result = true;    let output = ''    while (result) {        const { done, value } = await reader.read();      if (done) {        console.log('Stream ended');       result = false;       break;      }      const chunkText = textDecoder.decode(value);      output += chunkText;      console.log('Received chunk:', chunkText);    }  } catch (e) {    console.log(e); }}

插件

@microsoft/fetch-event-source 使用方法我就 不放了,看了一下源码也是基于fetch实现的,网上例子很多,可以看看。0O528资讯网——每日最新资讯28at.com

问题

本地运行的环境也是用的代理访问的部署好的环境的接口。插件是 Node.js 的 HTTP 代理中间件http-proxy-middleware。所以为何同样的配置,本地运行不行,而部署到环境上就正常了?有大佬遇到过吗0O528资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-75325-0.html一个SSE(流式)接口引发的问题

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一次性学会Java中的日志

下一篇: 系统设计面试问题:如何设计 Spotify,一个音乐流媒体系统

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
  • 最薄的14英寸游戏笔记本电脑 Alienware X14已可以购买

    2022年1月份在国际消费电子展(CES2022)上首次亮相的Alienware新品——Alienware X14现在已经可以购买了,这款笔记本电脑被誉为世界上最薄的 14 英寸游戏笔
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
Top