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

Flask-SocketIO自定义事件无响应,是否因用app.run()而非socketio.run()?

Flask-SocketIO自定义事件无响应的解决办法

你怀疑的点完全正确——用app.run()启动服务是无法触发SocketIO自定义事件的。Flask自带的app.run()仅启动标准WSGI服务器,不会加载SocketIO依赖的异步事件处理循环,导致你定义的@socket.on('test_event')监听逻辑根本没被激活。

修改后端启动方式

把原代码末尾的app.run(debug=True)替换成socket.run(app, debug=True),修改后的完整后端代码片段:

app = Flask(__name__)
# 若前端和后端存在跨域情况,需添加cors_allowed_origins配置
socket = SocketIO(app, cors_allowed_origins="*")

@socket.on('test_event')
def handle_test_event(data):
    rec_data = data['data']
    print(rec_data)

# 用SocketIO的run方法启动服务
socket.run(app, debug=True)

额外检查项

  • 版本兼容性:前端用的是SocketIO 4.7.1,后端flask-socketio需安装兼容版本(比如5.x系列适配前端4.x),可执行命令:pip install flask-socketio==5.3.6
  • 连接状态验证:在前端添加连接监听,确认SocketIO连接正常建立:
var socket = io.connect('http://' + document.domain + ':' + location.port);

socket.on('connect', () => {
    console.log('SocketIO连接成功');
});

socket.on('disconnect', () => {
    console.log('SocketIO连接断开');
});

window.onload = function() {
    console.log("Called onload");
    socket.emit('test_event', {'data': 'Hello World'});
}
  • 后端日志检查:启动服务后,若看到WebSocket transport is available、SocketIO server initialized这类日志,说明SocketIO服务正常加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:27:38