從 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.pswp.cn/web/70860.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70860.shtml
英文地址,請注明出處:http://en.pswp.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;以便后續在屏幕上進行顯…