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

React与Python集成Socket.io问题:装饰器无法触发

Socket.io ping事件处理器未触发的问题排查与解决

核心问题是事件处理器的定义位置错误:你的@sio.on('ping')装饰的ping函数写在了if __name__ == '__main__':代码块的后面,而app.run()是阻塞式调用,运行到这里后程序会一直停留在服务器启动状态,后面的代码根本不会被执行,所以这个ping事件的处理器实际上没有被注册到Socket.io服务器中。

修复步骤

将事件处理器的定义移到app.run()之前,保证服务器启动前所有事件监听都已注册完成。修改后的Python代码如下:

import socketio
from flask import Flask, render_template

# standard Python
sio = socketio.Server(
    logger=True, engineio_logger=True, async_mode='threading', 
    cors_allowed_origins="*"
)

app = Flask(__name__)
app.wsgi_app = socketio.WSGIApp(sio, app.wsgi_app)

# 将事件处理器移到app.run()之前
@sio.on('ping')
def ping(sid, data):
    print('did a ping!')
    print('ping', sid, data)
    # 替换exit逻辑,避免直接终止服务器,改为向客户端发送响应
    sio.emit('pong', {'response': 'received ping'}, room=sid)

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=3001)

额外注意事项

  • 原代码中的exit('this should fire')会直接终止服务器进程,建议替换成向客户端发送pong响应的逻辑,既可以让前端收到反馈,也不会影响服务器正常运行。
  • 检查前后端Socket.io版本兼容性:确保Python端的python-socketio和前端的socket.io-client版本匹配(比如统一使用v4.x系列),版本不匹配也可能导致事件无法正常触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:45:59