deepSeek-SSE流式推送数据

news2025/3/25 22:05:11

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 对比

特性SSEWebSocket
协议HTTP(单向)独立协议(双向)
复杂度低(浏览器原生支持)高(需手动管理连接、心跳)
数据格式文本(默认 UTF-8)支持二进制和文本
重连机制自动(可配置 retry需手动实现
适用场景服务端主动推送的只读场景双向高频交互(如聊天、游戏)
兼容性不支持 IE广泛支持(包括现代浏览器)

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2320903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

C#实现自己的Json解析器(LALR(1)+miniDFA)

C#实现自己的Json解析器(LALR(1)miniDFA) Json是一个用处广泛、文法简单的数据格式。本文介绍如何用bitParser(拥有自己的解析器(C#实现LALR(1)语法解析器和miniDFA词法分析器的生成器)迅速实现一个简单高效的Json解析器。 读者可在&#xf…

机器学习——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)领域的核心地位及其发展历程,从基础概念出发,延伸至语言模型在机器翻…

Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加或删除单元格边框

单元格边框是指在单元格或单元格区域周围添加的线条。它们可用于不同的目的,如分隔工作表中的部分、吸引读者注意重要的单元格或使工作表看起来更美观。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中添加或删除 Excel 单元格边框。 安装 Spire.XLS for .NET E-…

Web开发-JS应用NodeJS原型链污染文件系统Express模块数据库通讯

知识点: 1、安全开发-NodeJS-开发环境&功能实现 2、安全开发-NodeJS-安全漏洞&案例分析 3、安全开发-NodeJS-特有漏洞 node.js就是专门运行javascript的一个应用程序,区别于以往用浏览器解析原生js代码,node.js本身就可以解析执行js代…

国产达梦(DM)数据库的安装(Linux系统)

目录 一、安装前的准备工作 1.1 导包 1.2 创建用户和组 1.3 修改文件打开最大数 1.4 目录规划 1.5 修改目录权限 二、安装DM8 2.1 挂载镜像 2.2 命令行安装 2.3 配置环境变量 2.4 启动图形化界面 三、配置实例 四、注册服务 五、启动 停止 查看状态 六、数据库客…

git的底层原理

git的底层原理 三段话总结git, 1. 工作原理:git管理是一个DAG有向无环图,HEAD指针指向branch或直接指向commit,branch指向commit,commit指向tree,tree指向别的tree或直接指向blob。 2. git所管理的一个目录…

MATLAB+Arduino利用板上的按键控制板上Led灯

几年不使用,之前的知识都忘掉了。需要逐步捡起来。 1 熟悉按键的使用 2熟悉灯的控制 1 电路 我们将通过 MATLAB 的 Arduino 支持包与 Arduino 板通信,读取按键状态并控制 LED 灯的亮灭。 按键:连接到 Arduino 的数字引脚(例如…

Cocos Creator Shader入门实战(五):材质的了解、使用和动态构建

引擎:3.8.5 您好,我是鹤九日! 回顾 前面的几篇文章,讲述的主要是Cocos引擎对Shader使用的一些固定规则,这里汇总下: 一、Shader实现基础是OpenGL ES可编程渲染管线,开发者只需关注顶点着色器和…

vue设置自定义logo跟标题

准备 Logo 图片 将自定义的 Logo 图片(如 logo.png)放置在项目的 public文件夹下。 使用环境变量设置 Logo 和标题(可选) 创建或修改 .env 文件 在项目根目录下创建或修改 .env 文件,添加以下内容: VITE_A…

尝试在软考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,运行原理虚机&#xff0…

【Linux内核系列】:动静态库详解

🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 有些鸟儿是注定是关不住的,因为它们的每一片羽翼都沾满了自由的光辉 ★★★ 本文前置知识: 编译与链接的过程…

windows环境下NER Python项目环境配置(内含真的从头安的perl配置)

注意 本文是基于完整项目的环境配置,即本身可运行项目你拿来用 其中有一些其他问题,知道的忽略即可 导入pycharm基本包怎么下就不说了(这个都问?给你一拳o(`ω*)o) 看perl跳转第5条 1.predict报错多个设备…

IDEA批量替换项目下所有文件中的特定内容

文章目录 1. 问题引入2. 批量替换项目下所有文件中的特定内容2.1 右键项目的根目录,点击在文件中替换2.2 输入要替换的内容 3. 解决替换一整行文本后出现空行的问题4. 增加筛选条件提高匹配的精确度 更多 IDEA 的使用技巧可以查看 IDEA 专栏: IDEA 1. 问…

【蓝桥杯】4535勇闯魔堡(多源BFS + 二分)

思路 k有一个范围(0到怪物攻击的最大值),求满足要求的k的最小值。很明显的二分套路。 关键是check函数怎么写,我们需要找到一条从第一行到最后一行的路径,每一次可以从上下左右四个方向前进,那么我么可以用…

HTML图像标签的详细介绍

1. 常用图像格式 格式特点适用场景JPEG有损压缩,文件小,不支持透明适合照片、复杂图像PNG无损压缩,支持透明(Alpha通道)适合图标、需要透明背景的图片GIF支持动画,最多256色简单动画、低色彩图标WebP谷歌开…

Chapter 4-15. Troubleshooting Congestion in Fibre Channel Fabrics

show zone member: Shows the name of the zone to which a device belongs to. This command can be used to find the victims of a culprit device or vice versa. 显示设备所属的区域名称。该命令可用于查找罪魁祸首设备的受害者,反之亦然。 show zone active: Shows the…