我目前正在使用 SocketIO 开发 Flask Web 应用程序。基础知识有效,但是当我创建自定义事件(参见示例)时,服务器不响应它。这是因为我只是使用 app.run() 而不是 socketio.run() 吗?
Python 文件(片段):
app = Flask(__name__)
socket = SocketIO(app)
@socket.on('test_event')
def handle_test_event(data):
rec_data = data['data']
print(rec_data)
app.run(debug=True)
前端(片段):
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.7.1/socket.io.js"></script>
<script>
var socket = io.connect('http://' + document.domain + ':' + location.port);
window.onload = function() {
console.log("Called onload");
socket.emit('test_event', {'data': 'Hello World'});
}
</script>
我的事件是使用 socket.emit() 在客户端发起的,没有触发服务器上相应的事件处理程序(@socketio.on(...))。我已经检查了我的连接和其他内容,但我无法弄清楚为什么服务器没有接收和处理该事件。
您正在创建
socket = SocketIO(app)
但没有以任何方式运行它。相反,您运行 app
。事实证明,您启动的是应用程序本身,而不是套接字。
您需要使用
socket.run(app)
来运行应用程序并监听事件
https://flask-socketio.readthedocs.io/en/latest/getting_started.html#initialization