从 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命令安装flaskflask-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 应用开发方面的强大能力。开发者可在此基础上,根据实际需求添加更多高级功能,如用户管理、加密传输等,进一步完善应用。

TAGPython、Flask、SocketIO、Web 实时聊天、WebSocket、实时通信、Web 开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频字幕识别和翻译

下载的视频很多不是汉语的&#xff0c;我们需要用剪映将语音识别出来作为字幕压制到视频中去。 剪映6.0以后语音识别需要收费&#xff0c;但是低版本还是没有问题。 如果想要非汉语字幕转成中文&#xff0c;剪映低版本不提供这样功能。但是&#xff0c;用剪映导出识别字幕&am…

每天一个Flutter开发小项目 (4) : 构建收藏地点应用 - 深入Flutter状态管理

引言 欢迎回到 每天一个Flutter开发小项目 系列博客!在前三篇博客中,我们从零开始构建了计数器应用、待办事项列表应用,以及简易天气应用。您不仅掌握了 Flutter 的基础组件和布局,还学习了网络请求、JSON 解析等实用技能,更重要的是,我们一起探讨了高效的 Flutter 学习…

Visual Studio打开文件后,中文变乱码的解决方案

文件加载 使用Unicode&#xff08;UTF-8&#xff09;编码加载文件 C:\WorkSpace\Assets\Scripts\UI\View\ExecuteComplateView.cs时&#xff0c;有些字节已用Unicode替换字符替换。保存该文件将不会保留原始文件内容。

OpenGL ES -> GLSurfaceView绘制点、线、三角形、正方形、圆(顶点法绘制)

XML文件 <?xml version"1.0" encoding"utf-8"?> <com.example.myapplication.MyGLSurfaceViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"…

threejs 安装教程

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“threejs 安装教程”。 在当今的数字化时代&#xff0c;用户对视觉体验的要求越来越高。传统的2D网页已经无法满足所有需求&#xff0c;而三维&#xff08;3D&#xff09;图形技术则为前端开发者提供了新的方向。…

win11编译pytorch cuda128版本流程

Geforce 50xx系显卡最低支持cuda128&#xff0c;torch cu128 release版本目前还没有释放&#xff0c;所以自己基于2.6.0源码自己编译wheel包。 1. 前置条件 1. 使用visual studio installer 安装visual studio 2022&#xff0c;工作负荷选择【使用c的桌面开发】,安装完成后将…

如何安装Vm和centos

一、VMware 安装 &#xff08;一&#xff09;前期准备 下载 VMware 软件&#xff1a;首先&#xff0c;你需要从 VMware 官方网站下载适合你计算机操作系统版本的 VMware Workstation 软件安装包。确保选择的版本与你的主机操作系统兼容&#xff0c;例如&#xff0c;如果你的主…

OpenGL 04--GLSL、数据类型、Uniform、着色器类

一、着色器 在 OpenGL 中&#xff0c;着色器&#xff08;Shader&#xff09;是运行在 GPU 上的程序&#xff0c;用于处理图形渲染管线中的不同阶段。 这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说&#xff0c;着色器只是一种把输入转化为输出的程序。着色器…

服务器离线部署DeepSeek

目标 本次部署的目标是在本地服务器上部署DeepSeek。但是该服务不能连接外网&#xff0c;因此只能使用离线部署的方式。为了一次完成部署。现在云服务器上进行尝试。 云服务器部署尝试 云服务器配置 CentOS72080Ti 11GB 安装准备 1、上传iso并配置为本地yum源 安装前先将…

删除idea recent projects 记录

1、退出idea&#xff08;一定要全部退出idea&#xff0c;要不然删除后&#xff0c;idea一退出&#xff0c;又保存上了&#xff09; 2、进入 C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdea2024.1\options 目录 根据不同的版本号 IntelliJIdea2024.1 这个地方…

【MySql】EXPLAIN执行计划全解析:15个字段深度解读与调优指南

文章目录 一、执行计划核心字段总览二、关键字段深度拆解1. type&#xff08;访问类型&#xff09;——查询性能的晴雨表典型场景分析&#xff1a; 2. key_len&#xff08;索引使用长度&#xff09;——索引利用率的检测仪计算示例&#xff1a; 3. Extra&#xff08;附加信息&a…

如何实现一个 Spring Boot Starter

在 Spring Boot 中&#xff0c;Starter 是一种自动配置的模块&#xff0c;它封装了一些常用的功能&#xff0c;并通过 Spring Boot 的约定大于配置的原则&#xff0c;使开发者能够快速使用和集成相关功能。通常&#xff0c;Spring Boot Starter 包含了所需的依赖、配置、自动化…

使用python做http代理请求

有这样一个需求现在有两台A&#xff0c;B两台电脑组成了一个局域网&#xff0c;在A电脑上开发webjava应用&#xff0c;需要调用第三方接口做http请求&#xff0c;但是这个请求只能在B电脑上请求。 一种解决方案&#xff1a;自定义一个中间服务&#xff0c;在电脑B上运行一个简…

系统架构设计师考点——嵌入式技术

一、备考指南 嵌入式技术主要考查的是嵌入式基础知识、嵌入式设计等相关知识&#xff0c;在系统架构设计师的考试中选择题占2~4分&#xff0c;案例分析有时会考关键路径的技术问答&#xff0c;这个题目一般比较难&#xff0c;但是由于案例分析题是五题选三题&#xff0c;所以…

当AI重构认知:技术狂潮下的教育沉思录

备注&#xff1a;文章未Deepseek R1模型辅助生成&#xff0c;如有不妥请谅解。 以下使原文&#xff1a; 我有三个娃&#xff0c;各间隔4到5岁&#xff0c;经历过搜索引擎&#xff0c;短视频&#xff0c;短剧&#xff0c;本身曾经也是教育专业出生&#xff0c;任何事务都有两面性…

EasyExcel 实践案例:打印工资条

文章目录 &#x1f4a1; 1. 每个员工一个 Excel 文件✅ 占位符格式&#x1f4cc; Excel 模板&#x1f4cc; Java 代码&#x1f525; 关键点 &#x1f4a1; 2. 每个员工一个 Sheet✅ 占位符格式&#x1f4cc; Java 代码&#x1f525; 关键点 &#x1f4a1; 3. 一个 Sheet&#x…

编程题-从前序与中序遍历序列构造二叉树(中等-重点)

题目&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 提示: preorder 和 inorder 均 无重复 元素 解法一&#xff08;递归&#xff0…

Vue 3 + Vite 项目配置访问地址到服务器某个文件夹的解决方案

前言 在开发 Vue 3 Vite 项目时&#xff0c;我们经常需要将项目部署到服务器的某个特定文件夹下。例如&#xff0c;将项目部署到 /my-folder/ 目录下&#xff0c;而不是服务器的根目录。这时&#xff0c;我们需要对 Vite 和 Vue Router 进行一些配置&#xff0c;以确保项目能…

【Rust中级教程】2.10. API设计原则之受约束性(constrained) Pt.1:对类型进行修改、`#[non_exhaustive]`注解

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 2.10.1. 接口的更改要三思 如果你的接口要做出对用户可见的更改&#xff0c;那么一定要三思…

Imagination GPU 3D Graphics Wrokload

本次分享Imagination GPU 的3D 图像处理负载流程。 总的分为两个阶段 第一阶段&#xff1a;Geometry Processing Phase&#xff08;几何处理阶段&#xff09;是渲染管线中的一个关键环节&#xff0c;主要负责对三维几何数据进行处理和变换&#xff0c;以便后续在屏幕上进行显…