服务器发送事件和SQLAlchemy

时间:2015-08-04 00:34:42

标签: python flask sqlalchemy server-sent-events

我想使用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装饰器。我误解了什么?

1 个答案:

答案 0 :(得分:1)

SQLAlchemy执行 SQLAlchemy事件回调。它与Flask的请求/响应周期(除了您恰好在Flask中使用它之外)或服务器发送事件"无关。这完全取决于SQLAlchemy从事件回调返回的内容会发生什么,而SQLAlchemy没有任何功能可以从回调中产生以某种方式使用Flask生成服务器发送事件。

您可以stream a response with Flask,以便客户端随时间接收数据。

您真正想要做的就是从服务器向客户端发送事件通知。使用Flask-SocketIO或其他事件服务器+ websocket设置等系统将websocket从客户端连接到服务器。