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

FastAPI WebSocket完整配置指南:实现实时通信的终极教程

FastAPI WebSocket完整配置指南实现实时通信的终极教程【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapiFastAPI WebSocket配置是实现现代Web应用中实时双向通信的关键技术。作为高性能Python Web框架FastAPI提供了简洁而强大的WebSocket支持让开发者能够轻松构建实时聊天应用、实时数据推送和协作工具。本文将详细介绍如何配置和使用FastAPI WebSocket从基础连接到高级功能帮助您快速掌握这一重要技术。 FastAPI WebSocket核心优势FastAPI的WebSocket实现基于Starlette框架提供了完整的异步支持性能卓越且易于使用。与其他框架相比FastAPI WebSocket具有以下优势异步原生支持完全基于Python的async/await语法性能优异依赖注入系统与FastAPI的依赖注入系统完美集成类型安全完整的类型提示支持减少运行时错误自动文档生成WebSocket端点也会在API文档中展示易于测试内置测试客户端支持WebSocket测试 安装与基础配置首先需要安装必要的依赖包pip install fastapi websockets uvicorn基础WebSocket配置非常简单只需几行代码from fastapi import FastAPI, WebSocket from fastapi.responses import HTMLResponse app FastAPI() app.websocket(/ws) async def websocket_endpoint(websocket: WebSocket): await websocket.accept() while True: data await websocket.receive_text() await websocket.send_text(fMessage received: {data})图FastAPI WebSocket基础聊天界面 高级配置选项1. 路径参数与查询参数WebSocket端点支持路径参数和查询参数与普通HTTP路由类似app.websocket(/items/{item_id}/ws) async def websocket_endpoint( websocket: WebSocket, item_id: str, token: str Query(...) ): await websocket.accept() # 处理WebSocket连接图带认证参数的WebSocket连接界面2. 依赖注入系统FastAPI的强大依赖注入系统同样适用于WebSocketfrom fastapi import Depends, WebSocketException, status async def verify_token( websocket: WebSocket, token: str Query(None) ): if not token or token ! secret-token: raise WebSocketException( codestatus.WS_1008_POLICY_VIOLATION ) return token app.websocket(/secure/ws) async def secure_websocket( websocket: WebSocket, token: str Depends(verify_token) ): await websocket.accept() # 安全的WebSocket连接3. Cookie与Header验证WebSocket连接同样支持Cookie和Header验证async def get_cookie_or_token( websocket: WebSocket, session: str | None Cookie(defaultNone), token: str | None Query(defaultNone), ): if session is None and token is None: raise WebSocketException( codestatus.WS_1008_POLICY_VIOLATION ) return session or token️ 实际应用场景实时聊天应用from typing import List from fastapi import WebSocket class ConnectionManager: def __init__(self): self.active_connections: List[WebSocket] [] async def connect(self, websocket: WebSocket): await websocket.accept() self.active_connections.append(websocket) def disconnect(self, websocket: WebSocket): self.active_connections.remove(websocket) async def broadcast(self, message: str): for connection in self.active_connections: await connection.send_text(message) manager ConnectionManager() app.websocket(/chat/ws) async def chat_endpoint(websocket: WebSocket): await manager.connect(websocket) try: while True: data await websocket.receive_text() await manager.broadcast(f用户消息: {data}) except WebSocketDisconnect: manager.disconnect(websocket)图多用户实时聊天界面实时数据推送import asyncio import json from datetime import datetime app.websocket(/data/ws) async def data_stream(websocket: WebSocket): await websocket.accept() try: while True: # 模拟实时数据 data { timestamp: datetime.now().isoformat(), value: random.randint(1, 100), status: active } await websocket.send_json(data) await asyncio.sleep(1) # 每秒推送一次 except WebSocketDisconnect: print(客户端断开连接) 错误处理与连接管理连接状态管理from starlette.websockets import WebSocketState app.websocket(/managed/ws) async def managed_websocket(websocket: WebSocket): await websocket.accept() try: while websocket.client_state WebSocketState.CONNECTED: try: data await websocket.receive_text(timeout30) await websocket.send_text(f收到: {data}) except TimeoutError: # 发送心跳包保持连接 await websocket.send_text(ping) except WebSocketDisconnect: print(连接正常关闭) except Exception as e: print(f连接异常: {e})异常处理from fastapi import WebSocketException from starlette import status app.websocket(/error-handling/ws) async def error_handling_websocket(websocket: WebSocket): try: await websocket.accept() while True: data await websocket.receive_text() if data error: raise WebSocketException( codestatus.WS_1011_INTERNAL_ERROR, reason服务器内部错误 ) await websocket.send_text(f处理完成: {data}) except WebSocketException as e: print(fWebSocket异常: {e}) 性能优化建议1. 连接池管理from collections import defaultdict class WebSocketManager: def __init__(self): self.rooms defaultdict(list) async def join_room(self, room_id: str, websocket: WebSocket): await websocket.accept() self.rooms[room_id].append(websocket) async def send_to_room(self, room_id: str, message: str): for ws in self.rooms[room_id]: try: await ws.send_text(message) except: # 移除断开连接的客户端 self.rooms[room_id].remove(ws)2. 消息压缩对于大量数据传输可以考虑启用消息压缩app.websocket(/compressed/ws) async def compressed_websocket(websocket: WebSocket): await websocket.accept() # 在实际应用中可以结合gzip或zlib进行压缩 while True: data await websocket.receive_bytes() # 处理压缩数据 await websocket.send_bytes(compressed_data) 测试与调试单元测试from fastapi.testclient import TestClient def test_websocket(): client TestClient(app) with client.websocket_connect(/ws) as websocket: websocket.send_text(测试消息) data websocket.receive_text() assert data Message received: 测试消息调试工具使用浏览器开发者工具或专门的WebSocket测试工具进行调试图WebSocket消息调试界面 生产环境部署1. 反向代理配置在Nginx中配置WebSocket支持location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }2. 负载均衡对于多实例部署需要使用支持WebSocket的负载均衡器并确保会话粘性。3. 监控与日志import logging logger logging.getLogger(__name__) app.websocket(/monitored/ws) async def monitored_websocket(websocket: WebSocket): client_ip websocket.client.host logger.info(fWebSocket连接来自: {client_ip}) await websocket.accept() try: while True: data await websocket.receive_text() logger.info(f收到消息: {data}) await websocket.send_text(f已处理: {data}) except Exception as e: logger.error(fWebSocket错误: {e}) 最佳实践总结始终进行连接验证使用依赖注入系统验证WebSocket连接合理管理连接生命周期及时清理断开连接的客户端实现心跳机制保持长连接活跃限制消息大小防止恶意大消息攻击使用连接池高效管理大量连接监控连接状态及时发现和处理异常优雅的错误处理提供有意义的错误信息测试覆盖全面包括正常和异常场景通过本文的完整指南您已经掌握了FastAPI WebSocket的核心配置技巧。无论是构建实时聊天应用、数据推送服务还是协作工具FastAPI WebSocket都能为您提供强大而灵活的支持。现在就开始使用FastAPI WebSocket为您的应用添加实时通信能力吧✨图完整的WebSocket应用架构图【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

FastAPI WebSocket完整配置指南:实现实时通信的终极教程

FastAPI WebSocket完整配置指南:实现实时通信的终极教程 【免费下载链接】fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi FastAPI WebSocket…...

WebThings Gateway数据库设计与用户配置管理:深入理解网关数据持久化机制

WebThings Gateway数据库设计与用户配置管理:深入理解网关数据持久化机制 【免费下载链接】gateway WebThings Gateway - a self-hosted web application for monitoring and controlling a building over the web 项目地址: https://gitcode.com/gh_mirrors/gat/…...

PF4J高级特性解析:从依赖管理到安全包装器的完整指南

PF4J高级特性解析:从依赖管理到安全包装器的完整指南 【免费下载链接】pf4j Plugin Framework for Java (PF4J) 项目地址: https://gitcode.com/gh_mirrors/pf/pf4j PF4J(Plugin Framework for Java)是一个轻量级、企业级的Java插件框…...

WEF部署完全手册:在Linux系统上配置专业级Wi-Fi测试环境

WEF部署完全手册:在Linux系统上配置专业级Wi-Fi测试环境 【免费下载链接】WEF Wi-Fi Exploitation Framework 项目地址: https://gitcode.com/gh_mirrors/we/WEF Wi-Fi Exploitation Framework(WEF)是一款功能强大的Wi-Fi安全测试工具…...

SpiceAI Cayenne数据加速器:下一代列式存储格式的终极指南

SpiceAI Cayenne数据加速器:下一代列式存储格式的终极指南 【免费下载链接】spiceai A portable accelerated SQL query, search, and LLM-inference engine, written in Rust, for data-grounded AI apps and agents. 项目地址: https://gitcode.com/gh_mirrors/…...

从SST到MLD:手把手教你用xarray处理CMEMS海洋数据,生成月平均图与全局年平均场

从SST到MLD:xarray实战CMEMS海洋数据处理与可视化全流程 海洋数据科学正经历一场由工具革新驱动的效率革命。在哥白尼海洋环境监测服务(CMEMS)等开放数据平台的推动下,获取全球海洋参数已不再是瓶颈,真正的挑战转向如何…...

BiliBiliCCSubtitle:智能解析引擎驱动的B站字幕处理效率革命

BiliBiliCCSubtitle:智能解析引擎驱动的B站字幕处理效率革命 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 在数字内容产业高速发展的今天&#xff0…...

4种突破数字内容壁垒的技术方案:面向研究者与创作者的开源工具指南

4种突破数字内容壁垒的技术方案:面向研究者与创作者的开源工具指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fa…...

search-engine-optimization内容创作黄金法则:如何写出搜索引擎喜爱的文章

search-engine-optimization内容创作黄金法则:如何写出搜索引擎喜爱的文章 【免费下载链接】search-engine-optimization 🔍 A helpful checklist/collection of Search Engine Optimization (SEO) tips and techniques. 项目地址: https://gitcode.co…...

3分钟解锁B站缓存视频:m4s-converter让你真正拥有数字收藏

3分钟解锁B站缓存视频:m4s-converter让你真正拥有数字收藏 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾在B站缓存了珍贵的…...

抖音下载器:告别录屏时代,3步打造你的专属内容库

抖音下载器:告别录屏时代,3步打造你的专属内容库 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback…...

30秒React实用工具函数大全:10个必备开发技巧

30秒React实用工具函数大全:10个必备开发技巧 【免费下载链接】30-seconds-of-react Short React code snippets for all your development needs 项目地址: https://gitcode.com/gh_mirrors/30/30-seconds-of-react 30-seconds-of-react是一个专注于提供简短…...

React组件生命周期终极指南:30-seconds-of-react中useEffect的进阶用法

React组件生命周期终极指南:30-seconds-of-react中useEffect的进阶用法 【免费下载链接】30-seconds-of-react Short React code snippets for all your development needs 项目地址: https://gitcode.com/gh_mirrors/30/30-seconds-of-react 掌握React组件生…...

Filament Shield 策略生成器:自动化权限策略开发完全指南

Filament Shield 策略生成器:自动化权限策略开发完全指南 【免费下载链接】filament-shield The easiest and most intuitive way to add access management to your Filament Panel; Resources, Pages & Widgets through spatie/laravel-permission 项目地址…...

Browsershot完整指南:掌握网页截图与PDF生成的核心方法

Browsershot完整指南:掌握网页截图与PDF生成的核心方法 【免费下载链接】browsershot Convert HTML to an image, PDF or string 项目地址: https://gitcode.com/gh_mirrors/br/browsershot Browsershot是一款强大的工具,能够轻松实现HTML到图片、…...

Outlook邮箱爆满无法接收邮件怎么办?一篇文章教你用“归档”快速释放空间

🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...

机器视觉框架源码(最新版本)- VS2019直接编译、支持多种视觉检测与机器人控制

机器视觉框架源码,最新版本 到手vs2019可以直接编译、 视觉检测、AOI视觉检测、机械手定位、点胶机、插件机、激光切割机、视觉螺丝机、视觉贴合机、激光焊接机、视觉裁板机……, C#联合Halcon混合编程源码,插件式开发 ,带手眼标定…...

C++的std--ranges算法并行执

C的std::ranges算法并行执行:现代C的高效之道 随着现代计算机多核处理器的普及,并行计算已成为提升程序性能的关键手段。C20引入的std::ranges库不仅简化了范围操作,还通过与执行策略结合,为开发者提供了高效的并行计算能力。本文…...

三大平台智能抢票系统:从技术小白到抢票高手的自动化解决方案

三大平台智能抢票系统:从技术小白到抢票高手的自动化解决方案 【免费下载链接】damaihelper 支持大麦网,淘票票、缤玩岛等多个平台,演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 在数字化票务时代&a…...

ElementPlus主题定制实战:从零到一打造个性化UI风格

1. 为什么需要定制ElementPlus主题? 在实际项目开发中,我们经常会遇到这样的场景:UI设计师给出一套全新的配色方案,要求将ElementPlus默认的蓝色主题替换成项目专属的配色。这时候很多新手开发者可能会直接通过CSS样式覆盖的方式修…...

告别复制粘贴!用Vue CLI插件一键集成Cesium到Vue2老项目

告别复制粘贴!用Vue CLI插件一键集成Cesium到Vue2老项目 在Vue2项目中引入Cesium进行3D地理可视化开发时,传统的手动集成方式往往需要处理复杂的Webpack配置、静态资源管理和全局变量注入。这种"复制粘贴"式的集成不仅效率低下,还容…...

终极Windows优化指南:用Win11Debloat一键告别系统卡顿和隐私泄露

终极Windows优化指南:用Win11Debloat一键告别系统卡顿和隐私泄露 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declut…...

Unity PBR实战:手把手教你用Standard Shader调出真实金属与塑料质感

Unity PBR实战:用Standard Shader打造真实材质效果指南 当你在Unity中打开Standard Shader时,是否曾被那一长串参数列表弄得不知所措?Albedo、Metallic、Smoothness这些看似简单的滑块,实际上隐藏着将普通3D模型转化为逼真场景的关…...

【深度解析】硬中断与软中断:从硬件信号到软件调度的核心机制

1. 硬中断:硬件与CPU的紧急通话 想象一下你正在专心写代码,突然有人拍你肩膀说有紧急电话。这时候你必须立即保存当前工作状态,去接这个电话——这就是硬中断的生动比喻。硬中断本质上就是外部设备(比如网卡、硬盘、键盘&#xff…...

TrollInstallerX:iOS系统安装自动化解决方案(智能漏洞利用与全版本兼容)

TrollInstallerX:iOS系统安装自动化解决方案(智能漏洞利用与全版本兼容) 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 副标题&…...

容器启动失败?.NET 9 配置绑定失效全排查,从 Program.cs 到 docker-compose.yml 的12个断点检查清单

第一章:容器启动失败的典型现象与诊断原则容器启动失败是运维和开发过程中高频出现的问题,其表象多样但根源往往集中于配置、依赖或运行时环境。常见现象包括:容器瞬间退出(Exited (1))、持续重启(Restarti…...

UI For Docker完整贡献指南:10个步骤成为开源社区达人

UI For Docker完整贡献指南:10个步骤成为开源社区达人 【免费下载链接】ui-for-docker A web interface for Docker, formerly known as DockerUI. This repo is not maintained 项目地址: https://gitcode.com/gh_mirrors/ui/ui-for-docker UI For Docker是…...

Browsershot大数据处理终极指南:海量网页截图存储与分析完整方案

Browsershot大数据处理终极指南:海量网页截图存储与分析完整方案 【免费下载链接】browsershot Convert HTML to an image, PDF or string 项目地址: https://gitcode.com/gh_mirrors/br/browsershot 在当今数据驱动的时代,网页截图工具Browsersh…...

4步实现AnyLogic-Pypeline集成:构建跨语言仿真系统的实战指南

4步实现AnyLogic-Pypeline集成:构建跨语言仿真系统的实战指南 【免费下载链接】AnyLogic-Pypeline A custom AnyLogic library for running Python inside an AnyLogic model (Java) 项目地址: https://gitcode.com/gh_mirrors/an/AnyLogic-Pypeline AnyLogi…...

QMCDecode:破解音乐加密枷锁,重获数字音频自由

QMCDecode:破解音乐加密枷锁,重获数字音频自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默…...