Ниже приведен ответ, используя node.js.Как закрыть соединение Server-Send Events в Flask?
How to close a "Server-Sent Events"-connection on the server?
Однако, как сделать то же самое в питона термос?
Ниже приведен ответ, используя node.js.Как закрыть соединение Server-Send Events в Flask?
How to close a "Server-Sent Events"-connection on the server?
Однако, как сделать то же самое в питона термос?
Ну, это зависит от архитектуры вашего приложения.
Позвольте мне показать вам пример (см этот код на https://github.com/jkbr/chat/blob/master/app.py):
def event_stream():
pubsub = red.pubsub()
pubsub.subscribe('chat')
for message in pubsub.listen():
print message
yield 'data: %s\n\n' % message['data']
@app.route('/stream')
def stream():
return flask.Response(event_stream(),
mimetype="text/event-stream")
Колба требующему новое сообщение для Redis (блокировка работы) устойчиво, но когда колба видит, что потоковое заканчивается (StopIteration
, если не являются новыми для Python), он возвращается.
def event_stream():
pubsub = red.pubsub()
pubsub.subscribe('chat')
for message in pubsub.listen():
if i_should_close_the_connection:
break
yield 'data: %s\n\n' % message['data']
@app.route('/stream')
def stream():
return flask.Response(event_stream(),
mimetype="text/event-stream")
Кажется, что у автора Flask нет плана по его поддержке. Для «Server-Sent Events» лучше использовать управляемую событиями архитектуру, такую как NodeJS. – hllau
[этот комментарий] (http://stackoverflow.com/questions/32273937/how-to-redirect-when-server-sent-event-is-finished-in-flask-on-server-side#comment52434617_32275299) также был очень полезно для аналогичного вопроса – colidyre