Python使用总结之Flask-SocketIO介绍

embedded/2024/9/24 10:16:09/

Python使用总结之Flask-SocketIO介绍

一、Flask-SocketIO简介

Flask-SocketIO 是一个基于 Flask 的扩展库,用于在 Flask 应用中实现 WebSocket 通信。WebSocket 是一种双向通信协议,允许服务器和客户端之间在不重新建立连接的情况下进行实时数据交换。这种能力使得 WebSocket 非常适合用于构建实时聊天应用、在线游戏、实时数据推送等需要高频率数据传输的应用。

Flask-SocketIO 通过集成了几个底层库,如 geventeventletsocket.io 等,来提供一个简单易用的接口。开发者可以利用这个扩展,在熟悉的 Flask 框架基础上,轻松地构建实时通信应用。

二、Flask-SocketIO的安装

首先,需要安装 Flask-SocketIO 及其依赖项。你可以通过 pip 进行安装:

pip install flask-socketio

注意,Flask-SocketIO 支持多种异步模式,如 eventletgevent 和原生线程。推荐安装 eventlet 以获得更好的性能:

pip install eventlet
三、Flask-SocketIO的基本使用
1. 创建一个简单的 Flask-SocketIO 应用

下面是一个简单的示例,展示如何使用 Flask-SocketIO 来创建一个实时聊天应用:

python">from flask import Flask, render_template
from flask_socketio import SocketIO, sendapp = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecret'
socketio = SocketIO(app)@app.route('/')
def index():return render_template('index.html')@socketio.on('message')
def handleMessage(msg):print(f'Message: {msg}')send(msg, broadcast=True)if __name__ == '__main__':socketio.run(app, host='0.0.0.0', port=5000, debug=True)

在这个例子中,我们首先创建了一个 Flask 应用实例,并使用 SocketIO(app) 将其包装成支持 WebSocket 的应用。@socketio.on('message') 装饰器用于处理从客户端接收到的消息,并将其广播给所有连接的客户端。

2. 前端页面的实现

为了使 WebSocket 通信能够运行,还需要在前端使用 JavaScript 来与服务器建立连接。以下是一个简单的前端页面:

<!DOCTYPE html>
<html>
<head><title>Flask-SocketIO Chat</title><script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.min.js"></script>
</head>
<body><h1>Chat Room</h1><ul id="messages"></ul><input id="myMessage" autocomplete="off"><button onclick="sendMessage()">Send</button><script>var socket = io();socket.on('message', function(msg){var item = document.createElement('li');item.textContent = msg;document.getElementById('messages').appendChild(item);});function sendMessage() {var input = document.getElementById('myMessage');socket.send(input.value);input.value = '';}</script>
</body>
</html>

在这个 HTML 页面中,我们通过引入 socket.io 客户端库,并使用 JavaScript 代码与 Flask-SocketIO 服务器进行通信。socket.send 方法用于向服务器发送消息,而 socket.on('message') 用于接收服务器广播的消息。

3. 启动应用

在终端中运行该 Flask 应用:

python app.py

访问 http://localhost:5000,你将看到一个简单的聊天页面。你可以打开多个浏览器窗口,在不同窗口之间发送消息,消息会实时更新在所有窗口中。

四、Flask-SocketIO的其他功能

除了基本的消息发送和接收功能外,Flask-SocketIO 还支持以下功能:

  1. 命名空间:允许为不同的通信功能创建不同的通道。
  2. 房间:将客户端分配到不同的房间中,使消息只广播给特定房间的客户端。
  3. 事件装饰器:通过自定义事件名称,精细控制消息的处理方式。
  4. 会话管理:支持对客户端连接进行身份验证和会话管理。
五、总结

Flask-SocketIO 为 Flask 开发者提供了一个强大且简单的工具,使得实时通信应用的开发变得更加容易。通过利用 WebSocket 协议的双向通信能力,Flask-SocketIO 可以用于构建各种需要实时数据交互的应用,如在线聊天、通知推送、协作工具等。

希望通过本文的介绍,你能对 Flask-SocketIO 有一个初步的了解,并能够在你的项目中进行尝试。


http://www.ppmy.cn/embedded/105397.html

相关文章

【SpringBoot】自动配置原理

Spring Boot 自动配置原理是 Spring Boot 提供简化 Spring 应用程序开发的核心特性之一。 它使得开发者无需编写大量的配置代码就能让应用程序具有很多常见的功能。 以下是 Spring Boot 自动配置的基本原理和工作流程&#xff1a; 通过 SpringBootConfiguration 引入了 Enabl…

net、udp、tcp

Makefile的main.c文件中的全局变量SONG song,要在fun.c文件里面写成extern SONG song 编译方法 第一次编写 或 网络编程 物理层的网线规定有八根,颜色不一样,功能不一样,光猫把光信号转换成电信号,光纤10Gb WiFi叫无线局域网,一般也就50米左右,手机流量叫蜂窝网络,…

数据库水平分表方案

数据库分表有很多策略&#xff0c;如下&#xff1a; 数据库分表是处理大型数据库中数据量过大的一种常见策略&#xff0c;它可以提高查询性能、减少锁竞争、降低维护成本等。以下是一些常见的数据库分表方案&#xff1a; 1. **垂直分表&#xff08;Vertical Partitioning&…

【Python机器学习】NLP词频背后的含义——隐性语义分析

隐性语义分析基于最古老和最常用的降维技术——奇异值分解&#xff08;SVD&#xff09;。SVD将一个矩阵分解成3个方阵&#xff0c;其中一个是对角矩阵。 SVD的一个应用是求逆矩阵。一个矩阵可以分解成3个最简单的方阵&#xff0c;然后对这些方阵求转置后再把它们相乘&#xff…

gitlab 包含模型文件,比较大,怎么上传

当你的 GitLab 项目包含较大的模型文件或其他大文件时&#xff0c;直接上传可能会遇到一些限制。你可以使用以下几种方法来处理&#xff1a; 方法 1&#xff1a;调整 Git 的文件大小限制 调整 GitLab 的限制&#xff1a; 如果你有权限管理 GitLab 实例&#xff0c;你可以调整 …

UDP英译汉网络词典

这里我们用UDP实现一个简单的英译汉小词典。我们还是仿照前一篇的UDP编程&#xff0c;将各自的组件封装起来&#xff0c;实现高内聚低耦合。 一. 字典翻译功能实现 首先我们将我们的字典知识库放在txt文本中。 apple: 苹果 banana: 香蕉 cat: 猫 dog: 狗 book: 书 pen: 笔 ha…

vue、小程序识别换行

vue 1、\n <pre></pre>标签识别返回的\n换行符&#xff0c;与css的 white-space: pre-wrap(保留空白符序列&#xff0c;但是正常地进行换行。);&#xff0c;pre-line(合并空白符序列&#xff0c;但是保留换行符。)注意代码中的换行也会被识别到&#xff0c;如果标…

String核心设计模式——建造者模式

目录 建造者模式 优点 缺点 使用场景 结构 步骤 1 Item.java Packing.java 步骤 2 Wrapper.java Bottle.java 步骤 3 Burger.java ColdDrink.java 步骤 4 VegBurger.java ChickenBurger.java Coke.java Pepsi.java 步骤 5 Meal.java 步骤 6 MealBuilder…