Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nginx加速缓存导致event-stream消息延迟问题

nginx加速缓存导致event-stream消息延迟问题

作者头像
IT小马哥
发布于 2025-02-28 02:05:17
发布于 2025-02-28 02:05:17
25400
代码可运行
举报
文章被收录于专栏:Java TaleJava Tale
运行总次数:0
代码可运行

现象

在开发AI聊天助手功能模块,采用了跟chatGPT官网一样的stream流传输格式。

在建立起连接并且还未断的期间,后端服务器可以主动推送消息给前端。

在页面上能看到的效果就是AI回复的消息是一个字一个字打印出来的,而在浏览器的控制面板可以看到接口的response Content-Type是text/event-stream。

本地调试直接访问后端的地址没有问题,部署到线上,经过nginx后发现有问题.直接显示一段文字,然后卡顿两三秒,然后又是直接显示一段文字。整个过程看起来就很卡顿。

event-stream响应的数据几个chunk的发送时间一致,之前是每个chunk的发送时间都不一样.

排查

一开始还以为内外网的原因,因为一部署上去就走的外网,后来发现通过外网直接访问后台服务器地址也没有问题,才发现是nginx 缓存的事.

解决方案

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@PostMapping(value = "/chatStream" , produces = MediaType.TEXT_EVENT_STREAM_VALUE )
public Flux<ChatResponse>  chatStream(@RequestBody AiPrompt aiPrompt, HttpServletResponse response) {
  //设置响应头
  response.setHeader("X-Accel-Buffering", "no");
}

设置response.setHeader("X-Accel-Buffering", "no");

用于控制 Nginx 的 X-Accel-Buffering 行为的 HTTP 响应头。它通常用于禁用 Nginx 的响应缓冲功能,以便在java 中实现实时输出(例如流式传输或长轮询)。

后面再发送消息就没问题

本文由 小马哥 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名 最后编辑时间为: 2025/02/27 03:07

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。该方案设计目标是实现通用性,适用于各种网络架构和业务场景。
JackJiang
2025/05/31
1240
Web端实时通信技术SSE在携程机票业务中的实践应用
Uniapp仿ChatGPT Stream流式输出(非Websocket)-uniapp+see接收推送示例
最近写一个chagpt小程序,流式输出可以使用websocket也可以使用stream来实现,这里就不折腾websocket的了,我发现uniapp实现流式输出的方式挺多的,主要是有些小程序还不兼容,花了点时间研究了一下。
超级小可爱
2024/03/26
4.1K0
PHP 中使用 cURL 调用流式接口模式+流式响应并返回给客户端(php对接通义千问流模式输出给客户端–亲测可行)
在 Web 开发中,流式响应(Streaming Response)是一种高效的数据传输方式,它允许服务器在数据完全生成之前就开始向客户端发送数据。这在处理大文件、实时数据或其他需要快速响应的场景中特别有用。结合 cURL 库,我们可以在 PHP 中实现流式响应,并通过 Server-Sent Events (SSE) 将数据实时推送给客户端。
超级小可爱
2024/08/07
2.2K0
前端Server-Sent Events、EventSource接口相关知识点总结
转自:http://www.ruanyifeng.com/blog/2017/05/server-sent_events.html
房东的狗丶
2023/04/02
4.2K0
2020-6-8-理解node中的stream的背压机制
使用合适的压缩算法能够有效减少请求文件的大小,从而减少网络中的数据传输量,提升响应速度。
黄腾霄
2020/06/10
7150
我有 7种 实现web实时消息推送的方案,7种!
做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能。
程序员小富
2022/07/19
11.3K0
我有 7种 实现web实时消息推送的方案,7种!
PHP结合JavaScript SSE(流式显示)实现服务器实时推送功能
SSE 的全称是 Server Sent Events,即服务器推送事件。它是一种基于 HTTP 的服务器到客户端的单向(半双工)通信机制,使服务器能够主动将实时数据推送给客户端,而不需要客户端多次发起请求。 官方文档:https://developer.mozilla.org/en-US/docs/Web/API/EventSource
超级小可爱
2024/03/26
9390
Nginx 常见headers配置
在nginx中,经常需要因为各种原因,修改header,所以今天整理下nginx中header的一些指令
李俊鹏
2020/06/12
16.3K0
Nginx 常见headers配置
Servlet
Servlet是一个java接口,为我们封装好了处理HTTP请求的各种方法,而从达到浏览器和服务器的交互的目的,主要是处理Http请求并返回响应 Servlet是单例的,多用户访问创建多线程执行,即参数是栈内存独享,而成员变量有线程安全问题,需要加synchonized锁
晚上没宵夜
2022/05/09
9300
Servlet
PHP 与 JavaScript SSE:实现服务器实时推送功能的绝佳组合
SSE 的全称是 Server Sent Events,即服务器推送事件。它是一种基于 HTTP 的服务器到客户端的单向(半双工)通信机制,使服务器能够主动将实时数据推送给客户端,而不需要客户端多次发起请求。 官方文档:https://developer.mozilla.org/en-US/docs/Web/API/EventSource
Tinywan
2023/10/22
1.7K0
PHP 与 JavaScript SSE:实现服务器实时推送功能的绝佳组合
SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用
最近在公司闲着没事研究了几天,终于搞定了SSE从理论到实际应用,中间还是有一些坑的。 1.SSE简介 SSE(Server-sent events)翻译过来为:服务器发送事件。是基于http协议,和WebSocket的全双工通道(web端和服务端相互通信)相比,SSE只是单通道(服务端主动推送数据到web端),但正是由于此特性,在不需要客户端频繁发送消息给服务端,客户端却需要实时或频繁显示服务端数据的业务场景中可以使用。如:新邮件提示,在浏览网页时提示有新信息或新博客,监控系统实时显示数据。。。 在web端
用户1558882
2018/04/03
5.4K0
SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用
【Nginx29】Nginx学习:代理模块(三)缓冲区与Cookie处理
缓冲区的内容还是和 FastCGI 是相似的,测试方式也是相同的,这个咱们就不多说了。另外一个 Cookie 相关的配置指令则是 Proxy 模块所特有的,但其实也就是重写或修改后端响应的 Cookie 中的一些信息,一般来说用得也不是特别多,大家还是以了解的心态来看待。
硬核项目经理
2023/09/27
2.5K0
【Nginx29】Nginx学习:代理模块(三)缓冲区与Cookie处理
【Nginx39】Nginx学习:upstream服务器组模块
最后一个重点模块内容啦,感谢坚持到现在的你和我。总算是向大佬的道路上又前进了一步了。今天的内容主要是服务器组的配置,其实更直白点,就是 Nginx 负载均衡的配置模块。会不会有小伙伴不明白负载均衡是啥?如果是新同学,还不明白的话,要自己查查资料补习一下了哦。
硬核项目经理
2023/11/08
9691
【Nginx39】Nginx学习:upstream服务器组模块
【SpringBoot WEB 系列】SSE 服务器发送事件详解
SSE 全称Server Sent Event,直译一下就是服务器发送事件,一般的项目开发中,用到的机会不多,可能很多小伙伴不太清楚这个东西,到底是干啥的,有啥用
一灰灰blog
2020/04/24
6.2K0
【SpringBoot WEB 系列】SSE 服务器发送事件详解
(建议精读)HTTP灵魂之问,巩固你的 HTTP 知识体系
上回就已经承诺过大家,一定会出 HTTP 的系列文章,今天终于整理完成了。作为一个 web 开发,HTTP 几乎是天天要打交道的东西,但我发现大部分人对 HTTP 只是浅尝辄止,对更多的细节及原理就了解不深了,在面试的时候感觉非常吃力。这篇文章就是为了帮助大家树立完整的 HTTP 知识体系,并达到一定的深度,从容地应对各种灵魂之问,也同时提升自己作为一个 web 开发的专业素养吧。这是本文的思维导图:
桃翁
2020/04/07
1.1K0
(建议精读)HTTP灵魂之问,巩固你的 HTTP 知识体系
2024全网最全面及最新且最为详细的网络安全技巧 九之文件包含漏洞典例分析POC;EXP以及 如何防御和修复[含PHP源码和CTF精题WP详解](1)—— 作者:LJS
这篇文章研究的题目是:在使用Docker官方的PHP镜像php:7.4-apache时,Web应用存在文件包含漏洞,在没有文件上传的情况下如何利用?
盛透侧视攻城狮
2024/10/21
1080
2024全网最全面及最新且最为详细的网络安全技巧 九之文件包含漏洞典例分析POC;EXP以及 如何防御和修复[含PHP源码和CTF精题WP详解](1)—— 作者:LJS
可能是最好的跨域解决方案了
作者 | campcc 来源 | https://github.com/campcc/blog 今天我们来聊一个老生常谈的话题,跨域!又是跨域,烦不烦 ?网上跨域的文章那么多,跨的我眼睛都疲劳了,不看了不看了 🤣 别走...我尽量用最简单的方式将常见的几种跨域解决方案给大家阐释清楚,相信认真看完本文,以后不管是作为受试者还是面试官,对于这块的知识都能够游刃有余。 什么是“跨源” 不是讲跨域吗 ?怎么又来个“跨源” ?字都能打错的 ?😄...稍安勿躁,其实我们平常说的跨域是一种狭义的请求场景,简单来说,就是
JAVA葵花宝典
2021/11/23
4950
Web-第九天 ServletContext&amp;Response&amp;request学习
Web-第九天 ServletContext&Response&request学习
Java帮帮
2018/07/27
6300
Web-第九天 ServletContext&amp;Response&amp;request学习
浏览器的数据存储方法比较
Cookies 首次由netscape在 1994 年引入。Cookies 存储一些键值数据的小片段,主要用于会话管理、个性化跟踪。Cookies 可以设置多个安全选项,如生存时间或域名属性,以便在多个子域之间共享 Cookies。
IT小马哥
2024/12/04
3110
真正“搞”懂HTTP协议07之body的玩法(实践篇)
  我真没想到这篇文章竟然写了将近一个月,一方面我在写这篇文章的时候阳了,所以将近有两周没干活,另外一方面,我发现在写基于Node的HTTP的demo的时候,我不会Node,所以我又要一边学学Node,一边百度,一边看HTTP,最后百度的东西百分之九十不能用,所以某些点就卡的我特别难受。
zaking
2023/01/08
4210
真正“搞”懂HTTP协议07之body的玩法(实践篇)
推荐阅读
相关推荐
Web端实时通信技术SSE在携程机票业务中的实践应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验