Flask-SocketIO,一个高效的 Python WebSocket 库!
大家好我是“一行”。今天想带大家了解一个非常强大的工具Flask-SocketIO。在现代的Web应用中我们经常需要实时交互功能比如即时聊天、实时通知等。Flask-SocketIO正是一个帮助我们轻松实现WebSocket实时通讯的库。它简单好用、功能强大非常适合初学者上手。如果你已经熟悉Flask那今天的内容将会让你的应用更上一层楼什么是 Flask-SocketIOFlask-SocketIO是一个基于Flask框架的扩展库专门用于实现实时通讯。传统的HTTP协议是“请求-响应”模式服务器只能在客户端请求后进行响应而WebSocket可以让服务器主动推送数据给客户端实现双向实时通信。小贴士Flask-SocketIO不仅支持WebSocket还支持长轮询等多种通信方式它会自动选择最佳方式不用我们手动配置。安装 Flask-SocketIO首先我们需要在项目中安装 Flask-SocketIO。在命令行中运行以下命令pip?install?flask-socketio安装好后就可以开始创建一个小项目来体验实时通信的乐趣了创建第一个 Flask-SocketIO 应用基础设置我们从一个简单的应用开始让服务器接收到消息后能立即将消息广播给所有客户端。from?flask?import?Flask,?render_template from?flask_socketio?import?SocketIO,?send app??Flask(__name__) app.config[SECRET_KEY]??mysecret socketio??SocketIO(app) socketio.on(message) def?handle_message(msg): ????print(Received?message:???msg) ????send(msg,?broadcastTrue) if?__name__??__main__: ????socketio.run(app)在这个简单的代码示例中我们创建了 Flask 应用app Flask(__name__)初始化了 SocketIO 实例socketio SocketIO(app)处理消息事件当收到消息时将消息广播给所有客户端。代码解释socketio.on(message)监听事件类型message当客户端发送消息时触发。send(msg, broadcastTrue)发送消息给所有连接的客户端。创建前端页面我们还需要一个简单的前端页面来发送消息。我们使用HTML和JavaScript进行简单实现。文件名templates/chat.html!DOCTYPE?html html?langen head ????meta?charsetUTF-8 ????titleFlask-SocketIO?Chat/title ????script?srchttps://cdn.socket.io/4.0.0/socket.io.min.js/script /head body ????h1聊天室/h1 ????input?typetext?idmessageInput?placeholder输入消息... ????button?onclicksendMessage()发送/button ????ul?idmessages/ul ????script ????????var?socket??io.connect(http://??document.domain??:??location.port); ????????socket.on(message,?function(msg)?{ ????????????var?li??document.createElement(li); ????????????li.appendChild(document.createTextNode(msg)); ????????????document.getElementById(messages).appendChild(li); ????????}); ????????function?sendMessage()?{ ????????????var?msg??document.getElementById(messageInput).value; ????????????socket.send(msg); ????????????document.getElementById(messageInput).value??; ????????} ????/script /body /html在这个前端页面中我们实现了连接服务器的WebSocket通过Socket.IO客户端。监听message事件并将收到的消息显示在页面上。定义一个sendMessage函数将输入框中的消息发送到服务器。小贴士io.connect()会自动连接到当前网页所在的服务器无需指定完整URL这在部署应用时非常方便。运行应用确保前端文件和后端文件在同一个项目目录下然后在命令行运行以下命令启动应用python?app.py访问http://127.0.0.1:5000你应该会看到一个简单的聊天室界面。打开多个浏览器窗口输入消息观察消息会实时广播到其他窗口。Flask-SocketIO 的高级功能1. 命名空间Namespace在大型应用中我们可能需要多个命名空间来分割不同的功能。例如一个命名空间用于聊天另一个用于通知。我们可以使用命名空间来实现这种划分from?flask_socketio?import?emit socketio.on(message,?namespace/chat) def?handle_chat_message(msg): ????emit(message,?msg,?broadcastTrue,?namespace/chat) socketio.on(notification,?namespace/notifications) def?handle_notification(msg): ????emit(notification,?msg,?broadcastTrue,?namespace/notifications)通过命名空间消息只会在指定的空间内广播互不干扰。2. 房间Rooms房间是命名空间的进一步细分。通过房间我们可以让消息只发送给特定的用户组。例如在多人游戏或群聊中只有在同一房间内的用户才能收到彼此的消息socketio.on(join) def?on_join(data): ????username??data[username] ????room??data[room] ????join_room(room) ????send(username???has?entered?the?room.,?toroom) socketio.on(leave) def?on_leave(data): ????username??data[username] ????room??data[room] ????leave_room(room) ????send(username???has?left?the?room.,?toroom)3. 自定义事件除了message我们可以定义更多自定义事件帮助实现更细化的实时功能。例如可以定义一个notification事件专门用于发送通知。socketio.on(notification) def?handle_notification(data): ????print(Notification:,?data) ????emit(notification,?data,?broadcastTrue)代码解释emit(notification, data)发送通知事件。broadcastTrue将消息广播到所有客户端。小贴士尽量使用自定义事件命名保持事件名简洁且语义清晰。异常处理异常处理在WebSocket中也非常重要特别是在消息通信较频繁时。Flask-SocketIO可以结合Flask的标准异常处理机制我们可以捕获异常并返回错误消息。socketio.on_error()????????#?全局错误处理 def?error_handler(e): ????print(Error:,?e) socketio.on_error_default??#?捕获所有未定义命名空间的错误 def?default_error_handler(e): ????print(Unhandled?Error:,?e)总结今天我们学习了Flask-SocketIO它为Flask带来了强大的实时通讯能力特别适合用于聊天室、实时通知等功能。通过实例我们了解了如何设置基础通讯、命名空间、房间和自定义事件等高级功能。记住实时通讯是现代Web应用中非常流行的功能而Flask-SocketIO让我们在Python中实现它变得更加简单。希望大家能通过今天的学习为自己的项目增加一些实时互动功能。今天的Python学习之旅就到这里啦记得动手敲代码。祝大家学习愉快Python学习节节高

相关新闻

FaceFusion零基础入门:5分钟学会AI换脸,无需安装一键运行

FaceFusion零基础入门:5分钟学会AI换脸,无需安装一键运行

FaceFusion零基础入门:5分钟学会AI换脸,无需安装一键运行 你是不是也刷到过那些毫无违和感的AI换脸视频?明星的脸出现在搞笑短剧里,自己的照片被换上了复古妆容,甚至家里的宠物狗都有了人的表情。以前觉得这技术离我们…

2026/5/17 12:00:49 阅读更多 →
PROJECT MOGFACE 网络问题排查:从“403 Forbidden”错误理解API鉴权与访问控制

PROJECT MOGFACE 网络问题排查:从“403 Forbidden”错误理解API鉴权与访问控制

PROJECT MOGFACE 网络问题排查:从“403 Forbidden”错误理解API鉴权与访问控制 你是不是也遇到过这种情况?兴致勃勃地写好了调用PROJECT MOGFACE的代码,结果一运行,服务器冷冰冰地给你回了一个“403 Forbidden”。这感觉就像你拿…

2026/5/17 0:35:00 阅读更多 →
Qwen-Image-2512-Pixel-Art-LoRA 企业级运维指南:Linux环境下监控与日志管理

Qwen-Image-2512-Pixel-Art-LoRA 企业级运维指南:Linux环境下监控与日志管理

Qwen-Image-2512-Pixel-Art-LoRA 企业级运维指南:Linux环境下监控与日志管理 你刚把那个能生成酷炫像素画的AI模型部署上线,看着它吐出第一张8-bit风格的游戏角色图,心里美滋滋的。但没过两天,半夜被电话吵醒:“服务挂…

2026/7/5 3:03:51 阅读更多 →

最新新闻

从3D雕塑到方块宇宙:ObjToSchematic如何重塑数字创意的边界

从3D雕塑到方块宇宙:ObjToSchematic如何重塑数字创意的边界

从3D雕塑到方块宇宙:ObjToSchematic如何重塑数字创意的边界 【免费下载链接】ObjToSchematic A tool to convert 3D models into Minecraft formats such as .schematic, .litematic, .schem and .nbt 项目地址: https://gitcode.com/gh_mirrors/ob/ObjToSchemati…

2026/7/6 11:34:03 阅读更多 →
锂离子电池过压保护与STM32L031C6系统设计

锂离子电池过压保护与STM32L031C6系统设计

1. 锂离子电池过压保护的必要性与BQ29200特性解析 两节串联锂离子电池组在充电过程中,由于电芯个体差异、充电器故障或均衡电路失效等原因,可能出现单节电池电压超过安全阈值的情况。当电压超过4.35V时,电解液会开始分解产生气体,…

2026/7/6 11:34:03 阅读更多 →
HS工具箱深度评测:一站式在线工具平台如何提升开发与办公效率

HS工具箱深度评测:一站式在线工具平台如何提升开发与办公效率

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 你是不是也遇到过这样的场景:开发时突然需要把图片转成Base64编码,临时去搜在线工具,结果要么广告…

2026/7/6 11:29:59 阅读更多 →
数字图像处理 2.6 节:图像采样量化实战,Python 实现 8-bit 灰度图转换与伪轮廓分析

数字图像处理 2.6 节:图像采样量化实战,Python 实现 8-bit 灰度图转换与伪轮廓分析

数字图像处理实战:Python实现8-bit灰度图转换与伪轮廓分析当一张风景照片在显示器上呈现出明显的阶梯状色块时,我们看到的正是数字图像处理中典型的"伪轮廓"现象。这种现象源于图像量化过程中的信息损失,而理解其背后的原理对于从事…

2026/7/6 11:27:57 阅读更多 →
STM32L152RE与TPAFE0808构建多通道信号采集系统

STM32L152RE与TPAFE0808构建多通道信号采集系统

1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是常见需求。TPAFE0808作为8通道模拟前端芯片,配合STM32L152RE低功耗MCU,能够构建高效的多通道信号控制系统。这种组合特别适合需要同时监测多个传感器…

2026/7/6 11:25:53 阅读更多 →
4万星和5.7万星的两个框架,我焊在一起后它们封神了

4万星和5.7万星的两个框架,我焊在一起后它们封神了

第一个,AI 在「要构建什么」还没想清楚的时候就开始写代码。你跟它讨论需求,聊了三轮,它突然来一句「我来帮你实现吧」,然后一顿输出,写完一看,方向跑偏了。代码能跑,但不是你想要的。删了重来&…

2026/7/6 11:25:53 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻