新闻详情

新闻详情

首页 / 资讯中心 / 详情

第 22-1 篇:chat.html——前端如何消费 SSE

发布时间:2026/11/16 6:58:55来源:尧图网络
第 22-1 篇:chat.html——前端如何消费 SSE
上一篇21-3《内嵌 HTMLgen_embedded_web.py 怎么把页面塞进二进制》下一篇22-2《/admin API状态、配置、加载、转换》源码精读篇本文为源码/方法论精读无独立实测文中数字均引述仓库 docs 的板端实测记录一句话导读chat.html 前端如何消费 SSE服务端会发、前端怎么收——为何不用只读的 EventSource而用 fetch 加 ReadableStream 逐行切事件发送前又怎样借 admin 状态卡住未加载模型。关键词chat.html、SSE、ReadableStream、EventSource、admin API服务端 SSE 会发了20-3前端/chat页面怎么收这篇读src/serve/chat.html的流式消费代码——它没用EventSource那是 GET-only而是fetchReadableStream逐行读。顺带看它如何用/admin/api/status在发送前卡住模型没加载就不许发。1. 知识点POST 流式为什么不能用 EventSourceEventSource是浏览器原生 SSE 客户端但它只支持 GET——而/v1/chat/completions要 POST JSON。所以前端只能用fetch拿到响应流后自己按 SSE 格式切事件fetch(url, {method:POST, body: json}) → resp.body.getReader() // ReadableStream → 按 \n\n 切出每个事件 → 剥掉 data: 前缀 → JSON.parse → 追加到文本框这套手搓 SSE 消费和引擎手搓 SSE 生产vllm_http.c是对称的生产端不引库、消费端也不引库两端加起来 ~100 行。这正是零依赖风格的完整闭环——依赖是双向省掉的。2. 对应代码chat.html 的流式函数chat.html的关键锚点/* 162 行附近发送前查引擎状态 */ const s await fetch(/admin/api/status).then(r r.json()); // 模型没加载(load_state!2)就不许发 /* 397 行请求体带上 stream 开关 */ stream: $(p_stream).value 1 /* 447 行起流式主循环 streamRequest */ async function streamRequest(bodyObj, aiText, t0, onRaw){ const resp await fetch(/v1/chat/completions, { ... }); // POST const reader resp.body.getReader(); // ReadableStream // 边读边切 data: 事件逐段 append统计 genCount / 计算 tok/s 显示 }值得注意的两个工程点打字机效果的实现onRaw逐段回调把原文追加进文本框——页面上一个字一个字出现不是 CSS 动画是 SSE 每 50ms 一个 token 的真实节奏与 20-3 实测一致状态先行发送按钮的可用性由/admin/api/status的load_state决定162–170 行——前端先问模型加载了吗这比发了再等 400体验好一个数量级也说明 22-2 的 admin API 不是后端自嗨前端真在消费它。3. 改动后果前端把 SSE 当 JSON 读会怎样把streamRequest里逐事件切分改成等全部读完再 JSON.parse新手常犯后果实测可推演、也可在浏览器 DevTools 复现改前请求发出 ~130ms 后文本框开始出字角色帧先到随后逐 token 追加 改后整个请求期间文本框空白生成完才一次性出现整段——打字机效果消失 且请求超时风险上升长回答要等全部 decode 完才落盘到响应体这个改动后果不需要跑代码就能理解SSE 的全部价值在时间分布上消费端一旦缓冲生产端的逐 token 就白做了。在 DevTools 的 Network 面板看EventStream类型的响应体是逐块到达、还是攒包是最直接的验证。4. 学员调试任务A 档浏览器 板端 serve打开http://板IP:8801/chatDevTools → Network → 发一条流式消息点开该请求看响应体是否逐块增长EventStream 视图在streamRequest里加一行console.log(performance.now(), chunk)观察每个 chunk 的时间戳应 ~50ms 一跳把p_stream切到一次性 JSON对比 Network 面板里响应体一次性到达与流式的差异。B 档纯读源码读chat.html145–200 与 400–490回答① 为什么用getReader()手动切事件而不是resp.text()提示后者要等流结束②genCount/streamT0148–149 行被用来算什么、对用户体验有什么意义③ 若模型在流式中途被卸载auto_unload前端会看到什么、代码里有没有处理预期输出一张 DevTools 抓到的 SSE 分块时间轴截图 对你板子首字延迟与逐字节奏的读数。收尾本篇源码点名chat.html状态门 162–170、streamRequest 447 起开源仓库Kestrel-LLM (Gitee)AGPL-3.0-or-later 或商业许可二选一下篇预告前端偷偷调的那些/admin/api/*服务端到底给了什么22-2 逐个拆状态/配置/加载/转换四组接口的返回结构。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

AI 资讯日报 | 2026年9月25日:大模型持续降价,Agent与端侧AI加速落地,算力基础设施扩张,机器人、智能终端与企业应用成为产业新增长点 2026/11/13 11:08:24

AI 资讯日报 | 2026年9月25日:大模型持续降价,Agent与端侧AI加速落地,算力基础设施扩张,机器人、智能终端与企业应用成为产业新增长点

本期聚焦 2026年9月25日(星期五)全球 AI 领域重要动态,覆盖模型发布、产品应用、算力芯片、融资商业、安全治理与研究前沿六大板块。一、今日头条1. Meta Connect 2026:Muse 智能体全家桶落地,登顶美区 App StoreMeta …

阅读更多 →
六类文档示例,直观看到:同一个主题,不同文档类型的详略、语气、受众、结构完全不同 2026/11/15 14:43:46

六类文档示例,直观看到:同一个主题,不同文档类型的详略、语气、受众、结构完全不同

六类文档示例 下面用同一个项目(AutomaticStationPipeline)分别写六类文档的示例。这样你能直观看到:同一个主题,不同文档类型的详略、语气、受众、结构完全不同。 一、ADR(架构决策记录) 定位 目的:记录一个具体决策及其理由,供未来接手者理解"为什么当时这么选…

阅读更多 →
2026年聚合API分发平台底层架构与实战部署全流程解析 2026/11/14 18:38:01

2026年聚合API分发平台底层架构与实战部署全流程解析

2026年AI大模型行业爆发式增长,智能体、数字员工、内容生成赛道全面开花,多模型混用已是行业刚需。本文从底层架构与实战部署两个视角,完整解析聚合API分发平台这一品类:它解决什么问题、内部如何分层、企业又该如何落地。 国内AI…

阅读更多 →

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/16 6:47:19

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉