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

爱站seo工具包下载唐山做网站优化公司

爱站seo工具包下载,唐山做网站优化公司,惠山区住房和建设厅网站,艺术设计介绍 SSE(Server-Sent Events)是一种 服务器主动向客户端“推送”数据的技术,特别适合用来实现像 GPT 这种「流式输出」的效果。 SSE 是一种基于 HTTP 的单向通信协议: • 客户端(浏览器)发起请求后 •…

介绍

SSE(Server-Sent Events)是一种 服务器主动向客户端“推送”数据的技术,特别适合用来实现像 GPT 这种「流式输出」的效果。

SSE 是一种基于 HTTP 的单向通信协议

• 客户端(浏览器)发起请求后

• 服务器可以不断「推送消息」给客户端

• 使用 MIME 类型:text/event-stream

• 天然支持断线重连(Last-Event-ID)

用途

•	🌊 流式响应(比如 GPT、AI 对话)
•	📢 实时通知 / 消息广播
•	📈 实时数据更新(股票、仪表盘)
•	🧠 AI 推理过程展示

服务端:

用两个换行分割
data: 这是第一条消息data: 这是第二条消息data: {"event": "update", "msg": "更新成功"}

实现

使用fastapi 非常容易实现

定义一个接口,在这个接口定义一个async 异步方法,这个方法使用yield 生产对应的信息。

使用StreamingResponse 来对这个方法进行生产捕获

from fastapi import FastAPI,Request
from fastapi.responses import StreamingResponse
from services.async_openai_out import async_openai_out
import asyncio
app = FastAPI()@app.post('/sse/v1')
async def root(request: Request):async def event_stream():for i in range(10):yield f"data: {i}\n\n"await asyncio.sleep(0.1)# 用了 Python 的参数顺序机制,你看到的 content 参数确实就是你传入的 event_stream()。r = StreamingResponse(event_stream(), media_type="text/event-stream")return r

这个StreamingResponse 是一个异步响应类,支持将内容「一块一块」地异步地发送给客户端,而不是像普通 Response 一次性构造整个响应体。

•	发送响应时,Starlette 会通过 __call__ 调用 stream_response 方法,将响应体通过 await send() 一块块地推送给客户端。
•	你传入的 AsyncGenerator 会成为 body_iterator。

ContentStream = typing.Union[AsyncContentStream, SyncContentStream]
class StreamingResponse(Response):body_iterator: AsyncContentStreamdef __init__(self,content: ContentStream,status_code: int = 200,headers: typing.Mapping[str, str] | None = None,media_type: str | None = None,background: BackgroundTask | None = None,) -> None:•	AsyncContentStream: 异步生成器、异步迭代器(如 async def event_stream(): yield ...)•	SyncContentStream: 同步的可迭代对象(如 def gen(): yield ...

这个SSE的curl 和普通的post一样:

curl --location --request POST 'http://localhost:8000/sse/v1' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Accept: */*' \
--header 'Host: localhost:8000' \
--header 'Connection: keep-alive'

不过返回的响应头里面:

date	Sat, 22 Mar 2025 07:29:57 GMT
server	uvicorn
content-type	text/event-stream; charset=utf-8
Transfer-Encoding	chunked

FastAPI 会根据 返回值的类型自动推断并构造响应对象,这是因为 FastAPI 的底层用了 Pydantic + Starlette 自动序列化机制。

普通的post 响应请求:

@app.post('/sse/no_sse')
async def root(request: Request):r = {"message": "Hello World"} # 也可以直接返回return rreturn Response(content=json.dumps(r), media_type="application/json")from fastapi.responses import JSONResponse@app.post("/sse/no_sse")
async def root():return JSONResponse(content={"message": "Hello World"})

封装为openai使用的sse:

注意这个 yield f’data: {chunk}\n\n’ 少不了

@app.post("/sse/async_openai_out")
async def root(request: Request):user_message = "你好"async def gpt_stream():async for chunk in async_openai_out.gpt_stream(user_message=user_message,system_prompt="You are a helpful assistant."):print(chunk)yield f'data: {chunk}\n\n'r = StreamingResponse(gpt_stream(), media_type="text/event-stream")return r

一些思考

  • StreamingResponse 内部是如何 send() 的?

    FastAPI 的 StreamingResponse 继承自 Starlette 的 Response,其关键机制是异步迭代器(AsyncIterable)。核心在 call() 中调用了:

async def stream_response(self, send):async for chunk in self.body_iterator:await send({"type": "http.response.body","body": chunk,"more_body": True})
  • 为什么 text/event-stream 是长连接 + 推送?

    HTTP 长连接:

    • SSE 使用的是 HTTP/1.1 长连接,不会在发送完一条消息后断开。

    • 响应头 Content-Type: text/event-stream 告诉浏览器或客户端:“我会不断推送数据”。

    1. 服务端推送格式:

    • 每条消息格式是:data: xxxx\n\n

http://www.dtcms.com/a/556612.html

相关文章:

  • 上海网站快速排名做印尼购物网站如何发货
  • 乐度网上购物网站建设方案我想做百度推广
  • 郏县网站制作公司做网站别人点击能得钱吗
  • 木材网站建设哪家好制作微信小程序软件
  • 网站开发一个人可以完成吗医疗网站建设多少钱
  • 汝州住房和城乡建设网站h5网站后台管理模板
  • 怎么给网站做关键词搜索最好的书籍设计网站
  • 网站建设的总结与评价上海哪个区最繁华
  • 西宁手机微网站建设做空调管路网站
  • 梅县区住房和城乡规划建设局官方网站wordPress如何设置
  • 做网站后端需要什么语言最专业的房地产网站建设
  • 三明市住房与建设局网站seo包括网站建设吗
  • 绵阳医院网站建设谷歌搜图
  • 微信社群营销推广方案英文seo优化包年费用
  • 济南产品网站建设公司二级域名iis建立网站
  • 建设部网站招标投标文件python语言属于什么语言
  • 黑马程序员ppt课件优化网站排名怎么样
  • wordpress幻灯片尺寸专业放心关键词优化参考价格
  • 微网站建设正规公司自响应式网站建设清单
  • 游乐网站设计网络推广营销策划
  • 涉县网站建设湖南网站建设360o
  • 博山网站建设html网页编辑器下载
  • 有什么网站交互做的很好 知乎老哥们给个uc能看的2021
  • 做电力招聘的有哪些网站科技资讯 哪个网站好
  • 营销型网站欣赏建立网站需要多少钱八寇湖南岚鸿团队
  • 营销管理软件太原新站优化
  • 学网站开发工程师难学吗wordpress 倡萌 相册
  • 做网站新闻移动动态大学生创业计划书
  • 江西app网站建设网站建设程序文件
  • 黄江网站仿做计算机系毕设代做网站