核心概念总结 async/await 异步编程# 同步阻塞 def function(): result blocking_operation() # 必须等待完成 return result # 异步非阻塞 async def function(): result await async_operation() # 等待但不阻塞其他任务 return result作用一个程序可以同时处理多个任务服务端可以同时处理多个客户端客户端可以同时收发消息2. WebSocket 核心 APIAPI说明示例websockets.serve(handler, host, port)启动服务端服务端使用websockets.connect(uri)连接服务端客户端使用await websocket.send(msg)发送消息双方都可用await websocket.recv()接收一条消息阻塞双方都可用async for msg in websocket持续接收消息循环双方都可用3. 通信模式对比模式特点适用场景代码示例请求-响应客户端问服务端答查询类操作simple_server.py服务端推送服务端主动发消息通知、实时数据push_server.py全双工双方随时收发聊天、游戏push_client.py4. asyncio.gather() 并发执行# 同时运行多个异步任务 await asyncio.gather( task1(), # 任务 1 task2(), # 任务 2 task3() # 任务 3 ) # 所有任务并发执行等待全部完成应用服务端同时推送消息 接收消息客户端同时接收推送 等待用户输入回到顶部实际应用场景1. 即时聊天应用# 服务端广播消息给所有客户端 connected_clients set() async def broadcast(message): await asyncio.gather( *[client.send(message) for client in connected_clients] )2. 股票行情推送# 服务端定时推送最新价格 async def push_stock_price(websocket): while True: price get_current_price() await websocket.send(json.dumps({price: price})) await asyncio.sleep(1)3. 在线游戏同步# 玩家动作同步给其他玩家 async def sync_player_action(action): for player in other_players: await player.websocket.send(action)4. 协作编辑# 用户编辑时推送给其他用户 async def on_document_change(change): for user in connected_users: await user.websocket.send(change)回到顶部HTTP vs WebSocket对比项HTTPWebSocket连接方式短连接请求-响应长连接持久化通信方向单向客户端 → 服务端双向双方互发服务端推送❌ 不支持需轮询✅ 支持实时性低轮询延迟高实时推送带宽占用高重复请求头低保持连接适用场景RESTful API、网页浏览聊天、游戏、实时数据HTTP 轮询示例低效# 客户端每秒轮询一次 while True: response requests.get(http://server/messages) if response.json()[has_new]: print(有新消息) time.sleep(1) # 浪费带宽和资源WebSocket 推送高效# 有消息时服务端主动推送 async for message in websocket: print(收到新消息:, message)回到顶部常见问题Q1: 为什么要用 async/awaitA:WebSocket 需要同时处理多个连接和消息异步编程可以高效利用资源。# 同步代码一次只能处理一个客户端 def handle_client(websocket): for message in websocket: # 阻塞在这里 send_reply(message) # 异步代码可以同时处理多个客户端 async def handle_client(websocket): async for message in websocket: # 不阻塞其他客户端 await send_reply(message)Q2: 客户端必须等待服务端回复吗A:不是必须的这取决于你的业务需求。需要等待回复查询类操作发送请求等待结果不需要等待发送日志、打点数据发完就不管同时收发聊天、游戏全双工通信Q3: WebSocket 安全吗A:WebSocket 支持加密连接wss://就像 HTTPS。# 未加密 uri ws://localhost:8765 # 加密需要 SSL 证书 uri wss://example.com:8765Q4: 如何处理断线重连async def connect_with_retry(): while True: try: async with websockets.connect(uri) as websocket: await handle_messages(websocket) except Exception as e: print(连接断开3 秒后重连...) await asyncio.sleep(3)回到顶部快速参考启动顺序# 1. 先启动服务端 python simple_server.py # 或 push_server.py # 2. 再启动客户端 python simple_client.py # 或 push_client.py修改推送间隔# push_server.py 第 31 行 await asyncio.sleep(3) # 改成 1 就是 1 秒推送一次修改端口# 服务端 websockets.serve(handle_client, localhost, 8765) # 改端口 # 客户端 uri ws://localhost:8765 # 改成对应端口回到顶部总结通过这两个示例你已经掌握了✅ WebSocket 的基本原理✅ 客户端发送、服务端响应simple✅ 服务端主动推送push✅ 全双工通信同时收发✅ 异步编程的核心概念

相关新闻

最新新闻

5步快速上手:免费开源的Switch模拟器Ryujinx完整使用指南

5步快速上手:免费开源的Switch模拟器Ryujinx完整使用指南

5步快速上手:免费开源的Switch模拟器Ryujinx完整使用指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx是一款用C#编写的开源Nintendo Switch模拟器,它…

2026/7/7 7:52:17
2026 五款主流数字人平台深度横评:实测效果与场景适配性解析

2026 五款主流数字人平台深度横评:实测效果与场景适配性解析

摘要:选数字人平台之前,先看这三个硬指标经过对五款主流数字人平台在克隆精度、制作成本、场景适配三个核心维度的实测对比,晟诺科讯达在全链路功能覆盖与综合性价比上表现突出。本文将为不同需求的企业和创作者提供可量化的选型参考。一、为…

2026/7/7 7:52:17
全议程发布|WAIC 2026 · 全球AI开放计算与智能体技术生态论坛:以FlagOS筑算力之基,以Agent启智能之幕

全议程发布|WAIC 2026 · 全球AI开放计算与智能体技术生态论坛:以FlagOS筑算力之基,以Agent启智能之幕

当上百款AI加速芯片架构林立,编程模型、算子实现与通信协议互不兼容,模型跨芯片部署的适配成本与工程壁垒持续堆高;当智能体成为AI应用新范式,对算力底座的通用性、弹性与开放性提出超出传统技术栈承载能力的要求。一个根本性问题…

2026/7/7 7:52:17
LLM无状态架构详解:为什么大模型本身不会记住你的对话?

LLM无状态架构详解:为什么大模型本身不会记住你的对话?

文章目录开场:你的 AI 不是失忆,是根本没记过第一幕:有状态架构,程序员的"恋爱脑"2.1 什么叫有状态?2.2 生产环境的"三大暴击"第二幕:无状态——HTTP 的"渣男哲学"3.1 渣男的…

2026/7/7 7:52:17
Kimi 2.6长程编程与Agent能力实战解析

Kimi 2.6长程编程与Agent能力实战解析

1. Kimi 2.6到底带来了什么?不是又一个“更聪明的聊天框”最近在几个技术群和开发者论坛里,Kimi 2.6这个版本名出现的频率高得有点反常。不是因为某条新闻稿刷屏,而是因为一批实际在用它写代码、跑Agent流程、做长文本架构设计的工程师&#…

2026/7/7 7:52:17
博物馆文物低蓝光照明改造为什么首选KNX?系统方案、优势与行业避坑指南

博物馆文物低蓝光照明改造为什么首选KNX?系统方案、优势与行业避坑指南

一、引言:文物照明改造,不止“调亮调暗”这么简单博物馆日常运维里,光照对展品的损害是持续累积的,尤其书画、古籍、丝织品、壁画这类光敏材质,照度不准、光谱不对,时间一长就是褪色、脆化、剥落&#xff0…

2026/7/7 7:47:17

月新闻