Python 后端 Flask 使用 Flask-SocketIO、前端 Vue3 实现长连接 Websocket 通信详细教程(更新中)

Flask 安装 Flask-Socketio

Flask-SocketIO 第三方库使 Flask 应用程序可以实现客户端和服务器之间的低延迟双向通信。客户端应用程序可以使用 Javascript、Python、C++、Java 和 Swift 中的任何 SocketIO 客户端库或任何其他兼容客户端来建立与服务器的永久连接。

Flask-Socketio 官方文档网站

javascript 复制代码
网站地址:https://flask-socketio.readthedocs.io/en/latest/

初始化源码

javascript 复制代码
from flask import Flask, request
from flask_socketio import SocketIO

app = Flask(__name__)

from flask_cors import *
CORS(app, supports_credentials=True)

app.config['SECRET_KEY'] = 'EDGEHACKER520!'

socketio = SocketIO(app, cors_allowed_origins='*')

name_space = '/echo'


@socketio.on('connect', namespace=name_space)
def champion_connect():
    print(request)
    return True

@socketio.on('disconnect', namespace=name_space)
def champion_disconnect():
    pass


if __name__ == '__main__':
    print("启动成功")
    socketio.run(app, host='0.0.0.0', port=3000, debug=False)

常见报错: 2024-03-23 17:15:53,830 WARNING in __init__: WebSocket transport not available. Install gevent-websocket for improved performance.

报错解决方案

bash 复制代码
pip install gevent-websocket

前端 socket.io-client 客户端

bash 复制代码
npm install socket.io-client

客户端连接案例源码

javascript 复制代码
import io from 'socket.io-client';  

export default {
    data() {
        return {
            socket: null
        };
    },
    mounted() {
        this.socket = io.connect('ws://localhost:3000/echo?uid=helloworld', {
            timeout: 300000, reconnectionDelayMax: 1000, reconnectionDelay: 500
        })
    }
}

服务器端读取连接请求

javascript 复制代码
@socketio.on('connect', namespace=champion_space)
def champion_connect():
    print(request.args)
    return True
javascript 复制代码
ImmutableMultiDict([('uid', 'helloworld'), ('EIO', '4'), ('transport', 'polling'), ('t', 'OvhXJvg')])
相关推荐
Csvn16 分钟前
`??` 和 `||` 搞混,线上用户头像全挂了
前端
kyriewen41 分钟前
白宫前脚下了限制令,OpenAI 后脚就把 GPT-5.6 发了
前端·gpt·openai
aqi001 小时前
15天学会AI应用开发(九)利用Chroma持久化向量数据
人工智能·python·大模型·ai编程·ai应用
金銀銅鐵1 小时前
借助 Pygame 探索最大公约数的规律
python·数学·游戏
用户40269244819082 小时前
CRMEB Pro 新增后台接口全链路:路由、权限、验证器、返回格式一次讲清
前端·后端
泉城老铁2 小时前
springboot+vue+ ffmpeg 实现视频的拉流播放
前端
PedroQue992 小时前
uni-router v1.8.0新增冷启动守卫补执行
前端·uni-app
xiaok3 小时前
部署之后,本地浏览器还在读取旧缓存导致页面一直显示loading中
前端
用户059540174463 小时前
Redis缓存一致性踩坑实录:线上故障排查6小时,我用pytest+内存快照把它永久关进了笼子
前端·css