deepSeek-SSE流式推送数据
1、背景
DeepSeek作为当前最火的AI大模型, 使用的时候用户在输入框输入问题,大模型进行思考回答你,然后会有一个逐步显示的过程效果,而不是一次性返回整个答案给前端页面进行展示,为了搞清楚其中的原理,我们可以先来了解一下常见的几种前后端传输数据的方式:
(1)HTTP 请求(RESTful API),超文本传输协议,通过标准方法get/post请求数据,它是无状态无连接的,只能由客户端发起请求,服务端进行响应,也是最常见的传输数据方式;
(2)SSE(Server-Sent Events),基于 HTTP 的单向服务器推送协议,服务端可主动发送数据给客户端;
(3)WebSocket(全双工通信),基于 TCP 的双向实时通信协议,建立持久连接后,服务端和客户端都可以主动推送数据给对方;
| 类型 | 数据返回方式 | 适用场景 | 协议基础 |
|---|---|---|---|
| 传统API | 一次性返回完整结果 | 静态数据查询 | HTTP/HTTPS |
| SSE流式接口 | 持续分片推送 | 实时对话、长文本生成 | HTTP/HTTPS |
| WebSocket | 双向实时通信 | 即时聊天、高频交互 | 独立协议 |
2、deepSeek推送数据原理
F12查看控制台,发现Network里面的接口带了一个Content-Type:text/event-stream,它就是一种事件stream流的机制,通过HTTP长连接持续推送数据片段,前端逐步接收并实时渲染内容 ,所以呈现出来的效果就跟打字机一样逐字显示,与传统一次性返回的API不同,SSE允许服务器在请求处理过程中分批次发送数据,客户端无需等待全部数据加载完成即可展示部分结果,所以结论就是deepSeek通过SSE来实现数据推送显示的

3、SSE基本概念
SSE(Server-Sent Events) 是一种基于 HTTP 的轻量级实时通信技术,SSE 允许服务器将实时更新的数据主动推送给已建立连接的客户端。在传统的 Web 交互中,通常是客户端向服务器发送请求,然后服务器返回响应,这是一种 “请求 - 响应” 模式。而 SSE 打破了这种单向的模式,使服务器能够在有新数据时主动将数据推送给客户端,无需客户端频繁地发送请求来获取更新
4、SSE 核心特点
| 特性 | 说明 |
|---|---|
| 基于 HTTP | 无需复杂协议升级,直接复用现有 HTTP 协议和端口(如 80/443)。 |
| 单向通信 | 仅支持服务端向客户端推送数据,客户端通过普通 HTTP 请求初始化连接。 |
| 自动重连 | 浏览器原生支持连接断开后自动重连(可自定义重试时间)。 |
| 文本协议 | 数据格式为纯文本(默认 UTF-8),可通过 EventSource API 解析。 |
| 简单易用 | 客户端无需额外库,浏览器原生支持(除 IE)。 |
5、SSE 使用场景
- 实时通知:订单状态更新、系统报警、邮件到达提醒。
- 动态数据推送:股票价格、新闻推送、体育赛事比分。
- 长任务进度反馈:文件上传/处理进度、AI 生成任务的分步结果。
- 简单实时看板:监控仪表盘、日志流展示。
6、实现步骤
服务端配置(Node.js 示例)
const http = require("http");// 创建 SSE 服务
const server = http.createServer((req, res) => {if (req.url === "/sse") {// 设置 SSE 响应头res.writeHead(200, {"Content-Type": "text/event-stream","Cache-Control": "no-cache","Connection": "keep-alive",});// 定期推送消息let counter = 0;const timer = setInterval(() => {const data = `当前计数:${counter++}`;// 按 SSE 格式发送数据res.write(`data: ${data}\n\n`); // \n\n 表示消息结束if (counter >= 5) {clearInterval(timer);res.end(); // 关闭连接}}, 1000);} else {res.writeHead(404);res.end();}
});server.listen(3000, () => {console.log("SSE 服务运行在 http://localhost:3000/sse");
});
前端配置
// 初始化 SSE 连接
const source = new EventSource("http://localhost:3000/xxxx")// 监听默认事件
eventSource.onmessage = (event) => {console.log("收到数据:", event.data)
}// 监听连接错误
eventSource.onerror = (error) => {console.error("连接错误:", error)
}// 监听自定义事件(需服务端发送 event: customEvent)
eventSource.addEventListener("customEvent", (event) => {console.log("自定义事件数据:", event.data)
})
7、SSE 与 WebSocket 对比
| 特性 | SSE | WebSocket |
|---|---|---|
| 协议 | HTTP(单向) | 独立协议(双向) |
| 复杂度 | 低(浏览器原生支持) | 高(需手动管理连接、心跳) |
| 数据格式 | 文本(默认 UTF-8) | 支持二进制和文本 |
| 重连机制 | 自动(可配置 retry) | 需手动实现 |
| 适用场景 | 服务端主动推送的只读场景 | 双向高频交互(如聊天、游戏) |
| 兼容性 | 不支持 IE | 广泛支持(包括现代浏览器) |
相关文章:
deepSeek-SSE流式推送数据
1、背景 DeepSeek作为当前最火的AI大模型, 使用的时候用户在输入框输入问题,大模型进行思考回答你,然后会有一个逐步显示的过程效果,而不是一次性返回整个答案给前端页面进行展示,为了搞清楚其中的原理,我们…...
【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...
Leetcode 3495. Minimum Operations to Make Array Elements Zero
Leetcode 3495. Minimum Operations to Make Array Elements Zero 1. 解题思路2. 代码实现 题目链接:3495. Minimum Operations to Make Array Elements Zero 1. 解题思路 这一题的话核心就是统计对任意自然数 n n n,从 1 1 1到 n n n当中所有的数字对…...
C#实现自己的Json解析器(LALR(1)+miniDFA)
C#实现自己的Json解析器(LALR(1)miniDFA) Json是一个用处广泛、文法简单的数据格式。本文介绍如何用bitParser(拥有自己的解析器(C#实现LALR(1)语法解析器和miniDFA词法分析器的生成器)迅速实现一个简单高效的Json解析器。 读者可在…...
机器学习——KNN数据均一化
在KNN(K-近邻)算法中,数据均一化(归一化)是预处理的关键步骤,用于消除不同特征量纲差异对距离计算的影响。以下是两种常用的归一化操作及其核心要点: 质押 一 、主要思想 1. 最值归一化&#…...
异步编程与流水线架构:从理论到高并发
目录 一、异步编程核心机制解析 1.1 同步与异步的本质区别 1.1.1 控制流模型 1.1.2 资源利用对比 1.2 阻塞与非阻塞的技术实现 1.2.1 阻塞I/O模型 1.2.2 非阻塞I/O模型 1.3 异步编程关键技术 1.3.1 事件循环机制 1.3.2 Future/Promise模式 1.3.3 协程(Cor…...
哈尔滨工业大学DeepSeek公开课人工智能:大模型原理 技术与应用-从GPT到DeepSeek|附视频下载方法
导 读INTRODUCTION 今天继续哈尔滨工业大学车万翔教授带来了一场主题为“DeepSeek 技术前沿与应用”的报告。 本报告深入探讨了大语言模型在自然语言处理(NLP)领域的核心地位及其发展历程,从基础概念出发,延伸至语言模型在机器翻…...
制作Oracle11g Docker 镜像
基于Linux系统,宿主主机要设置如下环境变量,oracle为64位版本 dockerfile中需要的数据库安装包可从csdn下载内找到 #!/bin/bash # 在宿主机上运行以设置Oracle所需的内核参数 # 这些命令需要root权限cat > /etc/sysctl.d/99-oracle.conf << EO…...
Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加或删除单元格边框
单元格边框是指在单元格或单元格区域周围添加的线条。它们可用于不同的目的,如分隔工作表中的部分、吸引读者注意重要的单元格或使工作表看起来更美观。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中添加或删除 Excel 单元格边框。 安装 Spire.XLS for .NET E-…...
MAC-在使用@Async注解的方法时,分布式锁管理和释放
在使用 @Async 注解的异步方法中管理分布式锁时,需要特别注意 锁的获取、释放与异步执行的生命周期匹配。以下是结合 Spring Boot 和 Redis 分布式锁的实践方案: 1. 为什么需要分布式锁? 异步方法可能被多个线程/服务实例并发执行,若访问共享资源(如数据库、缓存),需…...
Flink启动任务
Flink 以本地运行作为解读,版本1.16.0 文章目录 Flink前言StreamExecutionEnvironmentLocalExecutorMiniCluster启动MiniCluster TaskManagerTaskExecutor提交Task(submitTask) StreamGraph二、使用步骤1.引入库2.读入数据 总结 前言 提示:这里可以添加…...
「低延迟+快速集成:Amazon IVS如何重塑实时互动视频体验?」
引言:实时视频的爆发与开发痛点 随着直播电商、在线教育、云游戏的兴起,实时视频互动成为用户体验的核心。但自建视频服务面临高成本、高延迟、运维复杂等挑战。Amazon IVS(Interactive Video Service)作为亚马逊云科技推出的全托…...
Web开发-JS应用NodeJS原型链污染文件系统Express模块数据库通讯
知识点: 1、安全开发-NodeJS-开发环境&功能实现 2、安全开发-NodeJS-安全漏洞&案例分析 3、安全开发-NodeJS-特有漏洞 node.js就是专门运行javascript的一个应用程序,区别于以往用浏览器解析原生js代码,node.js本身就可以解析执行js代…...
描述@keyframes规则在 CSS 动画中的原理及作用,如何创建一个简单的动画
大白话描述keyframes规则在 CSS 动画中的原理及作用,如何创建一个简单的动画? 嘿,朋友!咱来聊聊 CSS 里超酷的 keyframes 规则。这玩意儿就像是动画的剧本,能让网页元素动起来,就像给它们施了魔法一样&…...
国产达梦(DM)数据库的安装(Linux系统)
目录 一、安装前的准备工作 1.1 导包 1.2 创建用户和组 1.3 修改文件打开最大数 1.4 目录规划 1.5 修改目录权限 二、安装DM8 2.1 挂载镜像 2.2 命令行安装 2.3 配置环境变量 2.4 启动图形化界面 三、配置实例 四、注册服务 五、启动 停止 查看状态 六、数据库客…...
AI日报 - 2025年3月24日
🌟 今日概览(60秒速览) ▎🤖 AGI突破 | Lyra生物序列建模架构效率惊人 在100生物任务中达最优,推理速度提升高达12万倍 ▎💼 商业动向 | OpenAI用户破4亿,Meta与Reliance探讨AI合作 生态扩展与全…...
git的底层原理
git的底层原理 三段话总结git, 1. 工作原理:git管理是一个DAG有向无环图,HEAD指针指向branch或直接指向commit,branch指向commit,commit指向tree,tree指向别的tree或直接指向blob。 2. git所管理的一个目录…...
【Spring】Spring框架介绍
在 Java 企业级应用开发领域,Spring 框架凭借强大功能、高度灵活性与卓越扩展性,成为众多开发者构建大型应用系统的首选。接下来为大家深入剖析 Spring 框架的核心特性、架构设计及实际项目应用。 一、Spring 框架简介 Spring 框架由 Rod Johnson …...
MATLAB+Arduino利用板上的按键控制板上Led灯
几年不使用,之前的知识都忘掉了。需要逐步捡起来。 1 熟悉按键的使用 2熟悉灯的控制 1 电路 我们将通过 MATLAB 的 Arduino 支持包与 Arduino 板通信,读取按键状态并控制 LED 灯的亮灭。 按键:连接到 Arduino 的数字引脚(例如…...
AI比人脑更强,因为被植入思维模型【21】冯诺依曼思维模型
定义 冯诺依曼思维模型是一种基于数理逻辑和系统分析的思维方式,它将复杂的问题或系统分解为若干个基本的组成部分,通过建立数学模型和逻辑规则来描述和分析这些部分之间的关系,进而实现对整个系统的理解和优化。该模型强调从整体到局部、再…...
【QA】Qt中有哪些命令模式的运用?
在 C/Qt 中,命令模式(Command Pattern)的实现通常用于封装操作请求、支持撤销/重做(Undo/Redo)或解耦调用者与接收者。以下是几种常见的实现方式及示例: 1. Qt 的 QUndoCommand 和 QUndoStack(内…...
【连续自然数的和,双指针找区间】
对一个给定的正整数 MM,求出所有的连续的正整数段(每一段至少有两个数),这些连续的自然数段中的全部数之和为 MM。 例子:19981999200020012002100001998199920002001200210000,所以从 19981998 到 2002200…...
Cocos Creator Shader入门实战(五):材质的了解、使用和动态构建
引擎:3.8.5 您好,我是鹤九日! 回顾 前面的几篇文章,讲述的主要是Cocos引擎对Shader使用的一些固定规则,这里汇总下: 一、Shader实现基础是OpenGL ES可编程渲染管线,开发者只需关注顶点着色器和…...
vue设置自定义logo跟标题
准备 Logo 图片 将自定义的 Logo 图片(如 logo.png)放置在项目的 public文件夹下。 使用环境变量设置 Logo 和标题(可选) 创建或修改 .env 文件 在项目根目录下创建或修改 .env 文件,添加以下内容: VITE_A…...
Linux 账号和权限管理命令选项解释
用户账号文件 配置文件 /etc/passwd:用于保存用户 输出如下: root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin 每一行代表一个用户&…...
尝试在软考65天前开始成为软件设计师-计算机网络
OSI/RM 七层模型 层次名功能主要协议7应用层实现具体应用功能 FTP(文件传输)、HTTP、Telnet、 POP3(邮件)SMTP(邮件) ------- DHCP、TFTP(小文件)、 SNMP、 DNS(域名) 6表示层数据格式,加密,压缩.....5会话层建立,管理&终止对话4传输层端到端连接TCP,UDP3网络层分组传输&a…...
VMware主机换到高配电脑,高版本系统的问题
原来主机是i3 ,windows7系统,vmware 14.0,虚机系统是ubuntu 14.04。目标新机是i7 14700KF,windows11系统。原以为安装虚拟机,将磁盘文件,虚拟机配置文件拷贝过去可以直接用。 新目标主机先安装了vmware 15,运行原理虚机࿰…...
2025年3月 CCF GESP C++ 二级 真题解析
1. 单选题(每题2分,共30分) 第1题 试题:2025年春节有两件轰动全球的事件,一个是DeepSeek横空出世,另一个是贺岁片《哪吒2》票房惊人,入了全球票房榜。下面关于DeepSeek与《哪吒2》的描述成立的是( )。 A. 《哪吒2》是一…...
Nginx请求头Hos头攻击
HTTP请求头中的Host字段用于指定客户端请求的目标主机名(域名/IP)。当Nginx作为反向代理时,可利用该字段进行访问控制,防止非法域名或IP直接访问服务。 解决方法:添加判断请求头,如果不是指定请求头&#…...
2025年03月10日人慧前端面试(外包滴滴)
目录 普通函数和箭头函数的区别loader 和 plugin 的区别webpack 怎么实现分包,为什么要分包webpack 的构建流程变量提升react 开发中遇到过什么问题什么是闭包vue 开发中遇到过什么问题vue中的 dep 和 watcher 的依赖收集是什么阶段什么是原型链react setState 是同…...
