Python 服务器发送事件和SQLAlchemy

Python 服务器发送事件和SQLAlchemy,python,flask,sqlalchemy,server-sent-events,Python,Flask,Sqlalchemy,Server Sent Events,我想通过SQLAlchemy监听对数据库的提交,并通过服务器发送的事件向浏览器发布更新 我在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

我想通过SQLAlchemy监听对数据库的提交,并通过服务器发送的事件向浏览器发布更新

我在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 decorator。我误解了什么?

SQLAlchemy执行SQLAlchemy事件回调。它与Flask的请求/响应周期(您恰好在Flask中使用它的事实除外)或“服务器发送的事件”没有任何关系。事件回调返回的事件会发生什么情况完全取决于SQLAlchemy,而SQLAlchemy没有从回调中生成服务器发送的事件的功能

您可以这样做,以便客户机随时间接收数据


看起来您真正要做的是从服务器向客户端发送事件通知。使用诸如或其他一些事件服务器+websocket设置之类的系统将websocket从客户端连接到服务器。

它看起来像是
event\u stream()
在一次
yield
(连接断开)后返回,并且浏览器在3秒钟内重新连接(如果连接断开,应该如此)。这是一张工作票