2012-07-22 38 views
6

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?

+0

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

+0

[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

Trả lời

3

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") 
+0

'i_should_close_the_connection' là gì? Bạn sẽ giải thích thêm một chút? – hllau

+0

Đó là một boolean. Bạn có thể sử dụng câu lệnh 'if' như bạn sẽ làm trong Python. – gioi

+0

Hãy cho tôi một số mã và tôi rất sẵn lòng trợ giúp. – gioi

Các vấn đề liên quan