You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用flask-socketio加载HTML资源时出现Python报错问题求助

问题分析与解决思路

我之前也碰到过类似的情况,先帮你理清楚:你看到的GET /static/video/video.mp4这条日志,其实大概率是浏览器加载HTML里的视频资源时发起的正常请求,和Socket连接本身关联不大——哪怕你把Socket连接放到window.load之后,浏览器还是会在解析HTML的时候就去请求静态资源。

首先要确认几个关键点:

1. 静态文件路径是否正确

检查你HTML里的视频标签是不是用了绝对路径,比如:

<video src="/static/video/video.mp4" controls></video>

如果用了相对路径(比如static/video/video.mp4),当你的页面路由不是根路径/时,浏览器会把当前路由拼接到资源路径前,导致请求错误的地址,进而触发404日志。

2. Flask静态文件夹配置是否正常

默认情况下,Flask会自动识别项目根目录下的/static文件夹作为静态资源目录,但要确保你的Flask app初始化是正确的:

from flask import Flask
from flask_socketio import SocketIO

# 必须传入__name__,让Flask能正确定位静态文件夹
app = Flask(__name__)
socketio = SocketIO(app)

如果你的静态文件夹不在默认位置,需要手动指定:

app = Flask(__name__, static_folder='你的静态文件夹路径')

3. 测试直接访问静态资源

在浏览器地址栏直接输入http://localhost:5000/static/video/video.mp4(替换成你的端口),如果能正常播放视频,说明静态资源配置没问题;如果返回404,那就要检查文件是否真的存在于/static/video/目录下,文件名是否拼写正确(注意大小写!)。

4. Flask-SocketIO服务器启动方式是否正确

如果你用的是socketio.run(app)启动服务器,这个会基于Flask的开发服务器,默认是支持静态资源请求的。但如果是用第三方服务器(比如gunicorn+eventlet),需要确保静态资源的服务配置正确——比如eventlet环境下,可能需要额外配置静态路由:

from flask import send_from_directory

@app.route('/static/<path:filename>')
def serve_static(filename):
    return send_from_directory(app.static_folder, filename)

关于Socket连接时机

你用window.addEventListener('load', ...)来初始化Socket连接是没问题的,这样能确保页面所有资源加载完成后再建立连接。可以加个回调确认连接状态:

window.addEventListener('load', function() {
    var socket = io('http://' + document.domain + ':' + location.port);
    socket.on('connect', function() {
        console.log('Socket连接成功!');
    });
    socket.on('disconnect', function() {
        console.log('Socket断开连接');
    });
});

总结一下:你看到的那条日志如果是200状态码,其实是正常的资源请求日志;如果是404,那就是静态资源的路径或配置问题,和Socket连接时机无关,先把静态资源的访问问题解决掉就好啦。

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:08:36