為什么大模型網站使用 SSE 而不是 WebSocket?

在大模型網站(如 ChatGPT、Claude、Gemini 等)中,前端通常使用 EventSource(Server-Sent Events, SSE) 來與后端對接,而不是 WebSocket。這是因為 SSE 更適合類似流式文本生成的場景。下面我們詳細對比 SSE、WebSocket 和其他可選方案


1. SSE(Server-Sent Events,服務器發送事件)

特點:

  • 單向通信(服務器 → 客戶端),適用于大模型輸出流式文本的場景。
  • 基于 HTTP/1.1 及 EventSource API,兼容性較好,易于集成。
  • 自動重連,如果連接斷開,瀏覽器會自動嘗試重新連接。
  • 輕量級,開銷小,適合傳輸文本數據。

缺點:

  • 只支持 服務器推送,客戶端無法主動發送消息(需要用 AJAX/Fetch 結合)。
  • 同源策略 影響,跨域時需要 CORS 配置。
  • HTTP/2 之前,SSE 只能打開 6 個連接(瀏覽器限制),但在 HTTP/2 上可復用單連接,問題減小。

適用場景:

? 流式返回(如 ChatGPT 逐字輸出)
? 服務器向前端持續推送數據(如股票行情、日志監控)


2. WebSocket

特點:

  • 全雙工通信,客戶端和服務器可以隨時相互發送數據。
  • 基于 TCP,獨立于 HTTP,但通常通過 HTTP/HTTPS 協商(ws://wss://)。
  • 低延遲,適用于高頻交互(如實時聊天、游戲、協作編輯)。

缺點:

  • 連接管理復雜(心跳檢測、斷線重連、負載均衡較難)。
  • 代理/防火墻兼容性問題,某些企業網絡可能會阻止 WebSocket。
  • 服務器資源占用更大,需要維護長連接,占用線程/內存。

適用場景:

? 雙向實時交互(如在線協作、彈幕、游戲匹配)
? 低延遲高頻數據更新(如金融交易、物聯網)

為什么大模型網站不用 WebSocket?

  • WebSocket 適用于雙向通信,而 大模型的輸出是“流式”文本,客戶端只需接收數據,WebSocket 的優勢無法體現。
  • WebSocket 需要額外的 連接管理,而 SSE 依賴于現有的 HTTP 連接,更易集成。

3. HTTP 長輪詢(Long Polling)

特點:

  • 客戶端發送請求,服務器 保持連接不返回數據,直到有新數據才返回。
  • 客戶端收到數據后立即發送新的請求,模擬流式通信。
  • 兼容性極好,所有 HTTP 服務器都支持。

缺點:

  • 請求開銷大,每次返回數據后都需要重新建立 HTTP 連接,浪費資源。
  • 延遲較高,如果服務器沒有數據,客戶端必須定期請求,效率低。

4. gRPC(基于 HTTP/2 的流式通信)

特點:

  • 雙向流式通信(客戶端和服務器都可以持續發送數據)。
  • 基于 HTTP/2,性能較好,可在單個連接上多路復用請求。
  • 適用于微服務通信,比 REST API 更高效。

缺點:

  • 瀏覽器原生不支持,需要使用 gRPC-Web 代理轉換。
  • 復雜度高,部署比 SSE/WebSocket 難。

總結:哪種方式適合大模型前端?

方案是否適用于大模型流式返回?特點適用場景
SSE(EventSource)? 最佳選擇服務器 → 客戶端單向推送,輕量、自動重連流式輸出(ChatGPT)、實時通知
WebSocket? 過度設計雙向通信,低延遲,復雜連接管理聊天、游戲、協作編輯
長輪詢(Long Polling)? 開銷大兼容性強但效率低,每次數據返回后需重新請求舊系統支持
gRPC(HTTP/2 流)? 需要代理雙向流式,高性能,瀏覽器需 gRPC-Web微服務、API 交互

📌 所以,SSE 是最佳選擇

  1. 天然支持流式輸出,非常適合 ChatGPT 這類逐字返回的內容。
  2. 輕量級、簡單易用,只需 EventSource API,不需要額外的連接管理。
  3. 支持 HTTP/2,比 WebSocket 適合這類請求響應模式。

實際應用示例(基于 SSE 實現大模型流式輸出)

前端代碼(使用 SSE 監聽服務器消息):

const eventSource = new EventSource('/chat/stream');  // 后端返回流式數據eventSource.onmessage = (event) => {console.log('收到新消息:', event.data);
};eventSource.onerror = () => {console.log('連接斷開,嘗試重連...');eventSource.close();
};

后端代碼(Node.js 示例):

app.get('/chat/stream', (req, res) => {res.setHeader('Content-Type', 'text/event-stream');res.setHeader('Cache-Control', 'no-cache');res.setHeader('Connection', 'keep-alive');let count = 0;const interval = setInterval(() => {res.write(`data: 你好,消息 ${count++}\n\n`);if (count > 5) {clearInterval(interval);res.end();}}, 1000);
});

結論

SSE 是 最適合大模型流式返回的方案,因為它:
? 輕量級
? 自動重連
? 支持 HTTP/2
? 適用于服務器單向推送

所以,大模型網站普遍使用 SSE,而不是 WebSocket! 🚀

網站截圖

DeepSeek

請添加圖片描述

ChatGPT請添加圖片描述

Claude請添加圖片描述

文心一言請添加圖片描述

→ 以上 🐒

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73110.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73110.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73110.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TDengine 數據對接 EXCEL

簡介 通過配置使用 ODBC 連接器,Excel 可以快速訪問 TDengine 的數據。用戶可以將標簽數據、原始時序數據或按時間聚合后的時序數據從 TDengine 導入到 Excel,用以制作報表整個過程不需要任何代碼編寫過程。 前置條件 準備以下環境: TDen…

【具身相關】legged_gym, isaacgym、rsl_rl關系梳理

【legged_gym】legged_gym, isaacgym代碼邏輯梳理 總體關系IsaacGymlegged_gymrsl_rl三者的關系 legged_gym代碼庫介紹環境模塊env 總體關系 IsaacGym Isaac Gym 是 NVIDIA 開發的一個高性能物理仿真平臺,專門用于強化學習和機器人控制任務。它基于 NVIDIA 的 Phy…

【每日學點HarmonyOS Next知識】狀態變量、動畫UI殘留、Tab控件顯示、ob前綴問題、文字背景拉伸

1、HarmonyOS 怎么用一個變量觀察其他很多個變量的變化? 有一個提交按鈕的顏色,需要很多個值非空才變為紅色,否則變為灰色,可不可以用一個變量統一觀察這很多個值,去判斷按鈕該顯示什么顏色,比如Button().…

全鏈條自研可控|江波龍汽車存儲“雙輪驅動”體系亮相MemoryS 2025

3月12日,MemoryS 2025在深圳盛大開幕,匯聚了存儲行業的頂尖專家、企業領袖以及技術先鋒,共同探討存儲技術的未來發展方向及其在商業領域的創新應用。江波龍董事長、總經理蔡華波先生受邀出席,并發表了題為《存儲商業綜合創新》的主…

基于Python+SQLite實現校園信息化統計平臺

一、項目基本情況 概述 本項目以清華大學為預期用戶,作為校內信息化統計平臺進行服務,建立網頁端和移動端校內信息化統計平臺,基于Project_1的需求實現。 本項目能夠滿足校內學生團體的幾類統計需求,如活動報名、實驗室招募、多…

(每日一題) 力扣 2418. 按身高排序

文章目錄 🦄 LeetCode 2418.按身高排序|雙解法對比與下標排序的精妙設計📝 問題描述💡 解法思路分析方法一:Pair打包法(直接排序)方法二:下標排序法(當前實現&#xff09…

計算機畢業設計:ktv點歌系統

ktv點歌系統mysql數據庫創建語句ktv點歌系統oracle數據庫創建語句ktv點歌系統sqlserver數據庫創建語句ktv點歌系統springspringMVChibernate框架對象(javaBean,pojo)設計ktv點歌系統springspringMVCmybatis框架對象(javaBean,pojo)設計 ktv點歌系統mysql數據庫版本源碼&#xf…

Deepin通過二進制方式升級部署高版本 Docker

一、背景: 在Deepin系統中通過二進制方式升級部署高版本 Docker,下面將詳細介紹二進制方式升級部署高版本 Docker 的具體步驟。 二、操作步驟 1.根據需求下載二進制文件,下載地址如下: https://mirrors.tuna.tsinghua.e…

2025年Draw.io最新版本下載安裝教程,附詳細圖文

2025年Draw.io最新版本下載安裝教程,附詳細圖文 大家好,今天給大家介紹一款非常實用的流程圖繪制軟件——Draw.io。不管你是平時需要設計流程圖、繪制思維導圖,還是制作架構圖,甚至是簡單的草圖,它都能幫你輕松搞定。…

道路運輸安全員考試備考:循序漸進,穩步提升

備考道路運輸安全員考試是一個循序漸進的過程,需要穩步提升自己的知識和能力。? 第一階段是基礎鞏固階段。這一階段要以教材為核心,全面系統地學習各個知識板塊。從道路運輸法規開始,逐章逐節地學習,理解每一條法規的含義和適用…

滑動窗口(2)——哈希表輔助的滑動窗口算法

歡迎來到博主的專欄:算法解析 博主ID:代碼小豪 文章目錄 leetcode438——找到字符串中所有字母異位詞題目解析算法原理題解代碼 leetcode30——串聯所有單詞的子串題目解析算法原理題解代碼 leetcode438——找到字符串中所有字母異位詞 題目解析 異位詞…

Deepseek -> 如何寫 Dockerfile

嗯,用戶問的是如何制作Dockerfile,我得先理清楚步驟。首先,Dockerfile的基礎結構是什么?應該從基礎鏡像開始,對吧?比如FROM指令。然后可能需要設置工作目錄,用WORKDIR。接著復制文件&#xff0c…

RabbitMQ重復消費如何解決

消息重復消費的原因 生產者重試:網絡波動導致生產者未收到 Broker 確認,重復發送消息。消費者失敗:消費者處理消息后未發送 ACK,消息重新入隊。集群故障轉移:主節點宕機,未確認消息被重新投遞。 解決方案 …

Node-RED基礎1

目錄 一、概述二、安裝三、基操四、通訊五、數據六、節點七、 應用END 一、概述 Rode-Red是什么? 基于Node.js的物聯網開發工具,做API、通訊;提供了一些基本的監控功能,可在編輯器界面中查看節點的運行狀態、消息流量等信息。通…

java登神之階之順序表

一、了解List接口 在Java中,List接口是一個非常重要的集合框架接口,它繼承自Collection接口(Collection接口繼承Iterable接口)。List接口定義了一個有序集合,允許我們存儲元素集合。并且可以根據元素的索引來訪問集合中…

redux_舊版本

reduxjs/toolkit(RTK)是 Redux 官方團隊推出的一個工具集,旨在簡化 Redux 的使用和配置。它于 2019 年 10 月 正式發布,此文章記錄一下redux的舊版本如何使用,以及引入等等。 文件目錄如下: 步驟 安裝依…

MySQL:SQL優化實際案例解析(持續更新)

文章目錄 一、MySQL:SQL優化1、時間格式化問題(字符串)2、in/inner join的問題 一、MySQL:SQL優化 1、時間格式化問題(字符串) -- 優化前 SELECT * FROM test_table WHERE date_format( begin_time, %Y-%…

【含文檔+PPT+源碼】基于Python的美食數據的設計與實現

項目介紹 本課程演示的是一款基于Python的美食數據分析系統,主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 包含:項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 帶你從零開始部署運行本套系統 該項目附帶的源碼…

vue調整表格樣式之深度修改

舉例&#xff1a; <div class"grid-item"><h3>日數據</h3><el-table :data"dailyData" v-loading"loading"><el-table-column label"銷售姓名" align"center" prop"salesName" />…

【Go每日一練】統計字符出現的次數

&#x1f47b;創作者&#xff1a;丶重明 &#x1f47b;創作時間&#xff1a;2025年3月9日 &#x1f47b;擅長領域&#xff1a;運維 目錄 1.&#x1f636;?&#x1f32b;?題目&#xff1a;統計字符出現的次數2.&#x1f636;?&#x1f32b;?代碼中可用的資源3.&#x1f636;…