我想使用SQLAlchemy监听对数据库的提交,并使用Server Sent Events向浏览器发布更新。
我在Flask应用程序中有以下视图:
@event.listens_for(scoped_session, 'after_commit')
def event_stream(session):
yield 'data: %s\n\n' % 'helloworld'
@app.route('/stream')
def stream():
return Response(event_stream(scoped_session), mimetype="text/event-stream")
然后简单地说,在js:
var source = new EventSource('/stream');
source.onmessage = function (event) {
console.log(event);
};
应用程序每隔3秒填充一次请求,而忽略了我尝试实施的ORM装饰器。我误解了什么?
答案 0 :(得分:1)
SQLAlchemy执行 SQLAlchemy事件回调。它与Flask的请求/响应周期(除了您恰好在Flask中使用它之外)或服务器发送事件"无关。这完全取决于SQLAlchemy从事件回调返回的内容会发生什么,而SQLAlchemy没有任何功能可以从回调中产生以某种方式使用Flask生成服务器发送事件。
您可以stream a response with Flask,以便客户端随时间接收数据。
您真正想要做的就是从服务器向客户端发送事件通知。使用Flask-SocketIO或其他事件服务器+ websocket设置等系统将websocket从客户端连接到服务器。