2014-10-22 8 views
7

मैं this tutorial के बाद अपने फ्लास्क प्रोजेक्ट में सर्वर पुश को लागू करने का प्रयास कर रहा हूं।टेक्स्ट/इवेंट-स्ट्रीम डाउनलोड के रूप में पहचाना गया

मैंने इसे बिना किसी त्रुटि के सेट अप किया है, हालांकि जब मैं/स्ट्रीम पेज पर जाता हूं, फ़ायरफ़ॉक्स इसे फ़ाइल के रूप में पहचानता है और इसे डाउनलोड करने का प्रयास करता है। सफारी में यह सिर्फ भेजे गए डेटा को प्रिंट करता है। मैंने कोड को सरल कार्यान्वयन में अपनाने का प्रयास किया, जहां एक थ्रेड केवल प्रत्येक डेटा को कुछ सेकंड उत्पन्न करता है, हालांकि यह वही परिणाम उत्पन्न करता है।

मेरा लक्ष्य प्रत्येक बार एक पाइथन लिपि एक लूप में एक बिंदु तक पहुंचता है, यह वेब इंटरफ़ेस पर प्रगति पट्टी अपडेट करेगा।

इससे कोई मदद बहुत अच्छी होगी। धन्यवाद।

संपादित करें:

app.py

from flask import Flask, render_template, request, Response 

app = Flask(__name__) 

def event_stream(): 
    event = "Hello!" 
    yield 'data: %s\n\n' % event 

@app.route('/stream') 
def stream(): 
    return Response(event_stream(), mimetype="text/event-stream") 

if __name__ == "__main__": 
    app.debug = True 
    app.run(threaded=True) 

index.html

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

    <script type="text/javascript"> 
     var source = new EventSource('/stream'); 
     source.onmessage = function (event) { 
      alert(event.data); 
     }; 
    </script> 

</head> 
<body> 

    <p>Stream page</p> 

</body> 
</html> 
+0

आप एक जोड़ सकते हैं

app.py यहां कम उदाहरण है जो इस मुद्दे को प्रदर्शित करता है? –

+0

मैंने एक छोटा सा उदाहरण जोड़ा है। – DJDMorrison

उत्तर

20

संपादित

मैं अपने Github करने के लिए अपने नमूना आवेदन अपलोड कर दिया है। यहाँ देखें: https://github.com/djdmorrison/flask-progress-example


मैं इसे बाहर काम किया है, लेकिन जो एक ही समस्या हो जाता है किसी और के लिए: के रूप में यह ऐप्लिकेशन में कहा जाता है कभी नहीं है,

index.html पृष्ठ वास्तव में कभी लोड होता है। py। ऐसा करने का तरीका एक अलग मार्ग पर जाकर, उदाहरण के लिए पृष्ठ, और फिर send_file('index/html') लौटा रहा है। यह इंडेक्स पेज लोड करेगा, इवेंटसोर्स को/स्ट्रीम से लिंक करेगा, जो तब APP.py में स्ट्रीम विधि शुरू करेगा और सही डेटा देगा।

उदाहरण जो x हर 0.2 सेकंड में वृद्धि और वेब पेज पर यह प्रदर्शित करके एक प्रगति बार बनाता है:

@app.route('/page') 
def get_page(): 
    return send_file('templates/progress.html') 

@app.route('/progress') 
def progress(): 
    def generate(): 
     x = 0 
     while x < 100: 
      print x 
      x = x + 10 
      time.sleep(0.2) 
      yield "data:" + str(x) + "\n\n" 
    return Response(generate(), mimetype= 'text/event-stream') 

progress.html

<!DOCTYPE html> 
<html> 
<head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> 
    <script> 

    var source = new EventSource("/progress"); 
    source.onmessage = function(event) { 
     $('.progress-bar').css('width', event.data+'%').attr('aria-valuenow', event.data); 
    } 
    </script> 
</head> 
<body> 
    <div class="progress" style="width: 50%; margin: 50px;"> 
     <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"></div> 
    </div> 
</body> 
</html> 
+0

यदि किसी और को स्ट्रीम के साथ समस्या का सामना करना पड़ रहा है (उसमें कि स्ट्रीमिंग घटनाएं जैसे ही स्ट्रीम बंद हो जाती है), एंटी-वायरस सॉफ़्टवेयर को संभावित कारण के रूप में देखें (संदर्भ के लिए यह पोस्ट देखें: https: // stackoverflow। com/प्रश्न/12978466/जावास्क्रिप्ट-EventSource-SSE-नहीं-फायरिंग में ब्राउज़र)। उसमें एक कठिन समय लग रहा था, उम्मीद है कि दूसरों को इस क्रोधित मुद्दे की जांच करने में अपना समय बर्बाद करने की जरूरत नहीं है ... – fredpi

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