2012-07-22 18 views
6

नीचे दिए गए उत्तर node.js. का उपयोग कर दिया गया हैमैं फ्लास्क में सर्वर-भेजें ईवेंट कनेक्शन कैसे बंद करूं?

How to close a "Server-Sent Events"-connection on the server?

हालांकि, कैसे अजगर फ्लास्क में एक ही बात करना है?

+0

ऐसा लगता है कि फ्लास्क के लेखक के पास अभी तक इसका समर्थन करने की कोई योजना नहीं है। "सर्वर-प्रेषित घटनाओं" के लिए, किसी ईवेंट-संचालित आर्किटेक्चर जैसे NodeJS का उपयोग करना बेहतर है। – hllau

+0

[यह टिप्पणी] (http://stackoverflow.com/questions/32273937/how-to-redirect-when-server-sent-event-is-finished-in-flask-on-server-side#comment52434617_32275299) भी था एक समान प्रश्न के लिए बहुत उपयोगी – colidyre

उत्तर

3

अच्छा, यह आपके ऐप के आर्किटेक्चर पर निर्भर करता है।

मैं आपको एक उदाहरण (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, अगर आप पाइथन के लिए नए नहीं हैं), यह लौटता है।

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' क्या है? क्या आप थोड़ा और समझाएंगे? – hllau

+0

यह एक बुलियन है। आप उस 'if' कथन का उपयोग कर सकते हैं जैसा कि आप पायथन में करेंगे। – gioi

+0

मुझे कुछ कोड दें और मुझे मदद करने में खुशी होगी। – gioi

संबंधित मुद्दे