核心概念总结 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✅ 全双工通信同时收发✅ 异步编程的核心概念

相关新闻

最新新闻

MATLAB fmincon求解非线性规划:从模型构建到算法调优全解析

MATLAB fmincon求解非线性规划:从模型构建到算法调优全解析

1. 项目概述:从线性到非线性的思维跃迁 在数学建模和优化领域,非线性规划(Nonlinear Programming, NLP)是一个绕不开的核心话题。如果说线性规划是优化世界的“理想国”,所有关系都清晰、笔直,那么非线性规…

2026/8/29 20:07:15
小程序找茬游戏工程化模板:iOS兼容与性能优化实战

小程序找茬游戏工程化模板:iOS兼容与性能优化实战

简介:小程序游戏开发中,‘找茬’类交互是检验前端工程能力的典型场景。其核心涉及Canvas像素级坐标校准、iOS音频播放限制突破、分包加载性能优化等底层原理。技术价值在于将用户交互、渲染管线、资源调度与平台规则深度耦合,实现真机兼容、快…

2026/8/29 20:07:15
GA优化BP神经网络的工程实践与避坑指南

GA优化BP神经网络的工程实践与避坑指南

简介:BP神经网络作为经典前馈网络,依赖梯度下降进行权重更新,但在小样本、高噪声或类别不平衡场景中易陷入局部极小、收敛不稳定。遗传算法(GA)作为一种无梯度的全局优化方法,可有效弥补BP在权重空间搜索能…

2026/8/29 20:07:15
从零实现一个Curio风格HTML文件管理仓库:Node.js构建指南

从零实现一个Curio风格HTML文件管理仓库:Node.js构建指南

HTML 文件是 Web 世界里最常见也最容易被忽视的一类资产。最近看到一个名为 Curio 的项目,它的定位很简洁:a place for HTML files,也就是给 HTML 文件一个专门的“地方”来存放、预览和管理。对于经常写小工具、做页面原型、收藏代码片段、整…

2026/8/29 20:07:15
ABD共识算法实战:Quorum复制与近似一致性边界

ABD共识算法实战:Quorum复制与近似一致性边界

分享一套从零理解 ABD 共识算法的实战笔记,底层拆解 Quorum 复制机制与“几乎一致性”边界,配合可运行的 Python 模拟代码,帮助你彻底搞懂读写多数派、版本号推进和副本容错的核心逻辑。适合后端开发者、分布式系统学习者以及准备系统设计面试…

2026/8/29 20:07:15
深入理解备忘录模式中的Caretaker看护者:职责边界与实战案例

深入理解备忘录模式中的Caretaker看护者:职责边界与实战案例

在做文档编辑器、游戏服务端、配置中心这类业务时,我经常要处理一个看似简单却很容易失控的需求:把对象某个时刻的状态保存下来,等用户操作出错、流程中断或需要回退时,再把它恢复回去。最直观的方案是在业务类里直接复制一份字段…

2026/8/29 20:02:14