当前位置: 首页 > article >正文

SSE vs WebSocket:AI 驱动的实时通信抉择

websockets-vs-server-sent-events

引言

近年来,基于 Transformer 的大模型推动了 AI 产业的飞速发展,同时带来了新的技术挑战:

  • 流式传输 vs 批量返回:大模型生成的长文本若需一次性返回,会显著影响用户体验,实时推送成为必需。
  • 语音交互需求:语音助手要求毫秒级响应,而非等待用户完整输入后再返回结果。
  • 高并发负载:大模型 API 需支持数千甚至数万用户同时在线,对通信效率提出更高要求。

这些需求催生了对实时通信技术的关注,而 SSE(服务器发送事件)和 WebSocket 成为开发者关注的焦点。

什么是 SSE(服务器发送事件)?

SSEServer-Sent Events,服务器发送事件)是一种基于 HTTP 协议 的技术,允许服务器主动向客户端推送实时数据。它特别适用于需要流式传输的场景。

AI 场景中的应用

它的工作方式非常适用于 AI 应用,如:

  • 流式返回 AI 生成文本:如 ChatGPT 或腾讯云大模型 API,用户可逐字接收生成内容。
  • 实时分析推送:如情感分析或 NLP 处理结果的持续更新。
  • 任务进度监控:如批量推理任务的实时状态反馈。

SSE 的优点

简单易用:基于标准 HTTP,前端通过 EventSource API 即可实现,无需复杂配置。

自动重连:浏览器支持断开后自动重连,默认间隔约 2 秒,可通过 retry 字段自定义。

高效性:相较于轮询更节省资源,但在高并发下需关注连接管理。

流式传输:支持即时推送部分结果,降低用户等待延迟。

兼容性强:适配现有 HTTP 基础设施,支持 CDN 和代理服务器,可结合缓存优化性能。

download-sse

SSE 的消息格式

  • 数据编码:必须为 UTF-8 编码的文本。
  • HTTP 头信息
    • Content-Type: text/event-stream
    • Cache-Control: no-cache
    • Connection: keep-alive
  • 事件流格式:每条消息由多行字段组成,格式为 field: value\n,消息间以 \n\n 分隔。常用字段包括:
    • data:消息内容
    • event:事件类型
    • id:消息唯一标识,用于断线重连
    • retry:重试间隔(毫秒)

示例消息:

id: 12345
event: update
data: 这是一条更新消息

id: 12346
event: update
data: 这是一条新的更新消息

在这个示例中,服务器发送了两条消息,每条消息包含 ideventdata 字段,每条消息之间用两个换行符分隔。

SSE 实现示例

后端(Go):

package main

import (
    "fmt"
    "net/http"
    "time"
)

func sseHandler(w http.ResponseWriter, r *http.Request) {
   
	// 设置必要的头信息,确保客户端识别为 SSE 流
	w.Header().Set("Content-Type", "text/event-stream")
	w.Header().Set("Cache-Control", "no-cache")
	w.Header().Set("Connection", "keep-alive")

	flusher, ok := w.(http.Flusher)
	if !ok {
   
		http.Error(w, "Streaming unsupported"<

http://www.kler.cn/a/580605.html

相关文章:

  • thinkphp+mysql+cast解决text类型字段的文本型数字排序错误的方法 - 数据库文本字段排序ASC、DESC的失效问题
  • leetcode:单词距离
  • 美畅物联丨P2P系列之STUN服务器:助力网络穿透
  • 使用服务器搭建无门槛ChatGPT WEB应用LobeChat
  • 做到哪一步才算精通SQL
  • Linux网络之数据链路层协议
  • MySQL自动化配置工具开发
  • 图论的基础知识:平凡图、简单图、连通图、平面图、完全图、对偶图、同构图
  • 【Bert系列模型】
  • Tomcat与Jetty的选择
  • git submodule管理的仓库怎么删除子仓库
  • js 实现图片缩放插件,支持图片上一张、下一张切换
  • 【漫话机器学习系列】124.感知机(Perceptron)
  • [GHCTF 2025]SQL??? 【sqlite注入】
  • 企业招聘能力提升之道:突破困境,精准纳才
  • K8S学习之基础二十:k8s通过svc+ep代理服务
  • Axure常用变量及使用方法详解
  • MySQL中 IN 到底走不走索引?
  • GStreamer —— 2.9、Windows下Qt加载GStreamer库后运行 - “教程9:媒体信息收集“(附:完整源码)
  • 年末网络安全检查的清单