Bên dưới đã đưa ra câu trả lời bằng cách sử dụng node.js.Làm cách nào để đóng kết nối Sự kiện-Gửi sự kiện trong Flask?
How to close a "Server-Sent Events"-connection on the server?
Tuy nhiên, làm thế nào để làm điều tương tự trong python Flask?
Bên dưới đã đưa ra câu trả lời bằng cách sử dụng node.js.Làm cách nào để đóng kết nối Sự kiện-Gửi sự kiện trong Flask?
How to close a "Server-Sent Events"-connection on the server?
Tuy nhiên, làm thế nào để làm điều tương tự trong python Flask?
Vâng, tùy thuộc vào kiến trúc của ứng dụng của bạn.
Hãy để tôi chỉ cho bạn một ví dụ (xem mã này ở 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")
Flask hỏi một tin nhắn mới để Redis (khóa hoạt động) đều đặn, nhưng khi Flask thấy rằng chấm dứt truyền trực tuyến (StopIteration
, nếu bạn không phải là mới đối với Python), nó trả về.
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")
Có vẻ như tác giả của Flask chưa có kế hoạch hỗ trợ. Đối với "Sự kiện máy chủ được gửi", tốt hơn là nên sử dụng kiến trúc hướng sự kiện như NodeJS. – hllau
[nhận xét này] (http://stackoverflow.com/questions/32273937/how-to-redirect-when-server-sent-event-is-finished-in-flask-on-server-side#comment52434617_32275299) cũng là rất hữu ích cho một câu hỏi tương tự – colidyre