从 0 到 1,用 Python 构建超实用 Web 实时聊天应用
从 0 到 1,用 Python 构建超实用 Web 实时聊天应用
本文深入剖析如何运用 Python 的 Flask 框架与 SocketIO 扩展,搭建一个功能完备的 Web 实时聊天应用。从环境搭建、前后端代码实现,到最终运行展示,逐步拆解关键步骤,让你轻松掌握实时聊天应用开发技巧。
使用 Python 实现 Web 实时聊天案例,这里我们采用 Flask 作为 Web 框架,Flask-SocketIO 扩展来实现 WebSocket 通信,从而达到实时聊天的效果。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,非常适合实时应用场景。
文章目录
- 从 0 到 1,用 Python 构建超实用 Web 实时聊天应用
- 1. 环境搭建
- 2. 项目结构
- 3. 后端代码(`app.py`)
- 4. 前端代码(`templates/index.html`)
- 5. 运行应用
- 总结:
1. 环境搭建
首先确保你已经安装了必要的 Python 库。可以使用pip命令安装flask和flask-socketio:
pip install flask flask-socketio
2. 项目结构
chat_app/
├── app.py
├── templates
│ └── index.html
└── static└── styles.css # 可选,用于样式美化
3. 后端代码(app.py)
from flask import Flask, render_template
from flask_socketio import SocketIO, emitapp = Flask(__name__)
# 设置密钥,用于安全的WebSocket通信
app.config['SECRET_KEY'] ='secret!'
socketio = SocketIO(app)# 定义根路由,返回聊天页面
@app.route('/')
def index():return render_template('index.html')# 处理客户端发送的'message'事件
@socketio.on('message')
def handle_message(message):print('Received message: ', message)# 向所有连接的客户端广播消息(包括发送者自己)emit('message', message, broadcast=True)if __name__ == '__main__':# 启动SocketIO服务器,开启调试模式socketio.run(app, debug=True)
在上述代码中:
- 首先创建了一个 Flask 应用实例,并设置了
SECRET_KEY,这是为了保证 WebSocket 通信的安全。 - 使用
SocketIO类初始化 WebSocket 功能,并将其与 Flask 应用关联。 - 定义了根路由
/,返回index.html页面,即聊天界面。 @socketio.on('message')装饰器定义了一个事件处理函数,当客户端发送message事件时,该函数会被调用。函数接收到消息后,打印消息内容,并使用emit函数将消息广播给所有连接的客户端。
4. 前端代码(templates/index.html)
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Web Real-time Chat</title><script src="{{ url_for('static', filename='socket.io/socket.io.js') }}"></script><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><style>/* 简单的样式设置,可根据需求修改 */body {font-family: Arial, sans-serif;}#chat-messages {height: 400px;overflow-y: scroll;border: 1px solid #ccc;padding: 10px;}#message-input {width: 80%;padding: 5px;}#send-button {padding: 5px 10px;}</style>
</head><body><h1>Web实时聊天</h1><div id="chat-messages"></div><input type="text" id="message-input" placeholder="输入消息"><button id="send-button">发送</button><script>// 连接到SocketIO服务器var socket = io.connect('http://' + document.domain + ':' + location.port);// 监听服务器发送的'message'事件socket.on('message', function (data) {var chatMessages = document.getElementById('chat-messages');var p = document.createElement('p');p.textContent = data;chatMessages.appendChild(p);chatMessages.scrollTop = chatMessages.scrollHeight;});// 发送按钮点击事件处理document.getElementById('send-button').addEventListener('click', function () {var messageInput = document.getElementById('message-input');var message = messageInput.value;if (message.trim()!== '') {socket.emit('message', message);messageInput.value = '';}});// 监听键盘回车键事件document.getElementById('message-input').addEventListener('keydown', function (event) {if (event.key === 'Enter') {document.getElementById('send-button').click();}});</script>
</body></html>
在这个前端代码中:
- 引入了
Socket.IO库和jQuery库,Socket.IO用于与后端的 WebSocket 进行通信,jQuery用于简化 DOM 操作和事件处理。 - 定义了聊天消息显示区域、消息输入框和发送按钮。
- 使用
io.connect连接到后端的 SocketIO 服务器。 - 监听服务器发送的
message事件,当接收到消息时,将消息显示在聊天区域中,并自动滚动到最新消息。 - 为发送按钮绑定点击事件,当点击按钮时,获取输入框中的消息并发送给服务器。
- 监听输入框的键盘回车键事件,当按下回车键时,模拟发送按钮的点击操作。
5. 运行应用
在项目根目录下,运行app.py文件:
python app.py
然后在浏览器中访问http://127.0.0.1:5000/,即可进入聊天界面,多个用户同时访问该地址,就可以进行实时聊天了。
通过以上步骤,你就完成了一个简单的 Python Web 实时聊天应用,当然,你还可以根据实际需求对其进行扩展,比如添加用户认证、聊天记录存储等功能。
总结:
通过本次实践,我们利用 Python 的 Flask 和 SocketIO 成功打造了一个 Web 实时聊天应用。从后端路由与消息处理,到前端界面交互和事件监听,每个环节紧密配合。这不仅加深了对 Web 开发中实时通信原理的理解,也展示了 Python 在网络编程和 Web 应用开发方面的强大能力。开发者可在此基础上,根据实际需求添加更多高级功能,如用户管理、加密传输等,进一步完善应用。
TAG:Python、Flask、SocketIO、Web 实时聊天、WebSocket、实时通信、Web 开发
相关文章:
从 0 到 1,用 Python 构建超实用 Web 实时聊天应用
从 0 到 1,用 Python 构建超实用 Web 实时聊天应用 本文深入剖析如何运用 Python 的 Flask 框架与 SocketIO 扩展,搭建一个功能完备的 Web 实时聊天应用。从环境搭建、前后端代码实现,到最终运行展示,逐步拆解关键步骤࿰…...
AF3 DataPipeline类process_multiseq_fasta 方法解读
AlphaFold3 data_pipeline 模块DataPipeline类的 process_multiseq_fasta 方法用于处理多序列 FASTA 文件,生成 AlphaFold3 结构预测所需的特征,适用于多链复合物的预测。它结合了 Minkyung Baek 在 Twitter 上提出的“AlphaFold-Gap”策略,即通过在多链 MSA 中插入固定长度…...
Vue2+Element实现Excel文件上传下载预览【超详细图解】
目录 一、需求背景 二、落地实现 1.文件上传 图片示例 HTML代码 业务代码 2.文件下载 图片示例 方式一:代码 方式二:代码 3.文件预览 图片示例 方式一:代码 方式二:代码 一、需求背景 在一个愉快的年后ÿ…...
[记录贴] 火绒奇怪的进程保护
最近一次更新火绒6.0到最新版,发现processhacker的结束进程功能无法杀掉火绒的进程,弹窗提示如下: 可能是打开进程时做了权限过滤,火绒注册了两个回调函数如下: 但奇怪的是,在另外一台机器上面更新到最新版…...
【蓝桥杯】每天一题,理解逻辑(1/90)【Leetcode 移动零】
文章目录 题目解析讲解算法原理【双指针算法思路】(数组下标充当指针)如何划分和执行过程大致 代码详情 题目解析 题目链接:https://leetcode.cn/problems/move-zeroes/description/ 题目意思解析 把所有的零移动到数组的末尾保持非零元素的相对顺序 理解了这两层…...
vue js-web-screen-shot浏览器截取其他非全屏窗口界面
网页截屏 js-web-screen-shot 截取其他窗口 显示不全问题 npm 安装 js-web-screen-shot npm install js-web-screen-shot --savejs-web-screen-shot默认截屏是从左下角开始的,修改成左上角开始,然后编辑cropBoxInfo参数宽高进行截取,目前截…...
pycharm远程连接服务器运行pytorch
Linux部署pytorch 背景介绍 不同的开源代码可能需要不同的实验环境和版本,这时候的确体现出Anaconda管理环境的好处了,分别搞一个独立环境方便管理。 有的教程建议选择较旧的版本,但笔者建议在条件允许的情况下安装最新版,本次…...
服务器虚拟化是一种将物理服务器资源(如CPU、内存、存储、网络等)通过软件技术抽象、分割和整合,创建多个独立、隔离的虚拟服务器(虚拟机,VM)的技术。
服务器虚拟化是一种将物理服务器资源(如CPU、内存、存储、网络等)通过软件技术抽象、分割和整合,创建多个独立、隔离的虚拟服务器(虚拟机,VM)的技术。每个虚拟机可以运行不同的操作系统和应用程序,如同独立的物理服务器一样工作。 核心思想 资源池化:将物理服务器的硬…...
java练习(41)
ps:题目来自力扣 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 import java.util.Arrays;class Solut…...
关于CanvasRenderer.SyncTransform触发调用的机制
1)关于CanvasRenderer.SyncTransform触发调用的机制 2)小游戏Spine裁剪掉帧问题 3)Dedicated Server性能问题 4).mp4视频放入RT进行渲染的性能分析闭坑指南 这是第421篇UWA技术知识分享的推送,精选了UWA社区的热门话题…...
【计算机网络】OSI模型、TCP/IP模型、路由器、集线器、交换机
一、计算机网络分层结构 计算机网络分层结构 指将计算机网络的功能划分为多个层次,每个层次都有其特定的功能和协议,并且层次之间通过接口进行通信。 分层设计的优势: 模块化:各层独立发展(如IPv4→IPv6,…...
PDF扫描档智能方向识别:多模型投票机制的实践测试 救活古典书籍
2025-02-22 20:10物联全栈123 尊敬的诸位!我是一名物联网工程师。关注我,持续分享最新物联网与AI资讯和开发实战。期望与您携手探寻物联网与 AI 的无尽可能 RAG知识库搭建的过程中,扫描档pdf的支持和准确率一直是个大家都不愿主动提起的事情…...
java23种设计模式-桥接模式
桥接模式(Bridge Pattern)学习笔记 🌟 定义 桥接模式属于结构型设计模式,将抽象部分与实现部分分离,使它们可以独立变化。通过组合代替继承的方式,解决多维度的扩展问题,防止类爆炸。 &#x…...
【11】RUST使用cargo组织crate
文章目录 使用cargo组织crate重导出编译文档生成测试 cargo组织工作空间 TODOcrate.io账号 TODO暂时不看发布crate 使用cargo组织crate 重导出 在模块顶部使用pub use self::重导出,方便使用模块时候直接使用use mod_X::xxx。从而隐藏crate内部模块的结构。方便向…...
springboot 引入前端
前端 打包 npm run build vue.config.js 文件 publicPath 默认建议保持 / publicPath: ‘/’ 后端 目录 粘贴下面目录之一: src/main/resources/static/ src/main/resources/public/ 补充(用的少) server:servlet:context-path: /thirdAdm…...
ubuntu20.04 使用nmcli 连接wifi,并且设置永久连接
在 Ubuntu 20.04 中,你可以使用 nmcli 命令行工具来连接 WiFi 并设置为永久连接。以下是具体步骤: 1. 查看可用的 WiFi 网络 首先,使用以下命令查看可用的 WiFi 网络: nmcli dev wifi 这将列出所有可用的 WiFi 网络及其 SSID。…...
Android-创建mipmap-anydpi-v26的Logo
利用 Android Studio 自动创建 创建新项目:打开 Android Studio,点击 “Start a new Android Studio project” 创建新项目。在创建项目的过程中,当设置Target SDK Version为 26 或更高版本时,Android Studio 会在项目的res目录下…...
轻松搭建:使用Anaconda创建虚拟环境并在PyCharm中配置
一、使用Anaconda创建虚拟环境 1. 安装Anaconda 2..conda常用的命令 3. 创建虚拟环境-以搭建MachineVision为例 4. 激活虚拟环境 5. 安装依赖包 二、PyCharm配置环境 在进行Python项目开发时,合理的环境管理是必不可少的,特别是当你在多个项目中…...
驱动开发系列39 - Linux Graphics 3D 绘制流程(二)- 设置渲染管线
一:概述 Intel 的 Iris 驱动是 Mesa 中的 Gallium 驱动,主要用于 Intel Gen8+ GPU(Broadwell 及更新架构)。它负责与 i915 内核 DRM 驱动交互,并通过 Vulkan(ANV)、OpenGL(Iris Gallium)、或 OpenCL(Clover)来提供 3D 加速。在 Iris 驱动中,GPU Pipeline 设置 涉及…...
结构型模式 - 代理模式 (Proxy Pattern)
结构型模式 - 代理模式 (Proxy Pattern) 代理模式是一种结构型设计模式,它允许通过代理对象来控制对另一个对象(目标对象)的访问。代理对象充当目标对象的接口,客户端通过代理对象间接访问目标对象。 分为两大类 静态代理&#…...
Ubuntu 24.04 登录禁用用户列表
Ubuntu 24.04 登录禁用用户列表 得到登录用户列表状态禁用登录用户列表 得到登录用户列表状态 gsettings get org.gnome.login-screen disable-user-list禁用登录用户列表 gsettings get org.gnome.login-screen disable-user-list true...
MinIO整合SpringBoot实现文件上传、下载
文章目录 配置1. 部署MinIO服务2. 整合SpringBoot 功能实现1. 文件上传2. 文件下载 总结 配置 1. 部署MinIO服务 这里以docker为例: 安装minio命令docker run -p 9000:9000 -p 9001:9001 \ --name minio \ -v /path/to/data:/data \ -e "MINIO_ROOT_USERmin…...
【Python爬虫(90)】以Python爬虫为眼,洞察金融科技监管风云
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
FreeRTOS(3)列表List
在 FreeRTOS 的源码中大量地使用了列表和列表项,因此想要深入学习 FreeRTOS,列表和列表项是必备的基础知识。这里所说的列表和列表项,是 FreeRTOS 源码中 List 和 List Item 的 直译,事实上, FreeRTOS 中的列表和列表项…...
C++和OpenGL实现3D游戏编程【连载23】——几何着色器和法线可视化
欢迎来到zhooyu的C++和OpenGL游戏专栏,专栏连载的所有精彩内容目录详见下边链接: 🔥C++和OpenGL实现3D游戏编程【总览】 1、本节实现的内容 上一节课,我们在Blend软件中导出经纬球模型时,遇到了经纬球法线导致我们在游戏中模型光照显示问题,我们在Blender软件中可以通过…...
Harmony开发笔记(未完成)
一、感想 作为一名拥有11年经验的Android开发者,我亲历了Android从高速发展到如今面临“僧多粥少”的过程。技术的世界瞬息万变,没有一种技术能够让人依赖一辈子。去年初,我自学了鸿蒙系统,并顺利通过了鸿蒙官方的初级和高级认。…...
【Java面试】创建线程有哪几种方式
目录 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口和FutureTask 4.使用Executor框架(线程池) Java并发编程中不同接口和类之间的关系 总结 1.继承Thread类 优点: 简单直观。直接继承Thread类,可以方便地使用Threa…...
在Linux环境下利用MTCNN进行人脸检测(基于ncnn架构)
概述 本文将详细介绍如何在Linux环境下部署MTCNN模型进行人脸检测,并使用NCNN框架进行推理。 1. CMake的安装与配置 下载CMake源码 前往CMake官网下载,找到适合您系统的最新版本tar.gz文件链接,或者直接通过wget下载:CMake官方…...
AI数字人系统源码部署解决方案!!!
一、开场白 如今,科技的步伐越来越快,数字人已经从想象中走进了我们的现实生活。它们在娱乐、教育、医疗等多个领域大放异彩。了解数字人的代码开发技术,能让我们更好地理解其工作原理,为那些想在这一领域大展拳脚或者用数字人技…...
W803|联盛德|WM IoT SDK2.X测试|(1)开箱:开发板及说明
前几天关注的联盛德微电子新推出了WM IoT SDK2.X,正式发布后,邀请用户参加“免费试用,赢千元大礼”活动,填写信息,等待统一发送,很快收到了板子。 活动地址:联盛德微电子WM IoT SDK2.X正式发布…...
