भेजा है, मैं क्लाइंट को नया डेटा धक्का देने और फ़्लोट (जावास्क्रिप्ट चार्टिंग लाइब्रेरी) का उपयोग करके "लाइव" अपडेट प्रदर्शित करने के लिए एसएसई का उपयोग करने के बारे में सोच रहा हूं। मेरे सर्वर अजगर बोतल ढांचे पर चलता है और मैं पता लगा है ग्राहक के लिए डेटा पुश करने के लिए कैसे, लेकिन समस्या यह रूप में जल्द ही मैं पृष्ठ को छोड़ के रूप में होती है:फ्लास्क सर्वर ने ईवेंट सॉकेट अपवाद
Exception happened during processing of request from ('127.0.0.1', 38814)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 582, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/SocketServer.py", line 640, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 693, in finish
self.wfile.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
मुझे समझ में क्यों त्रुटि तब होती है - सॉकेट है "लाइव" डेटा की सेवा करने वाले अनंत लूप के कारण कभी बंद नहीं हुआ। प्रश्न यह है कि मैं पृष्ठ परिवर्तन का पता कैसे लगा सकता हूं और सॉकेट को साफ रूप से बंद कर सकता हूं? क्या मैं क्लाइंट साइड पर कनेक्शन बंद कर सकता हूं? मैं पृष्ठ परिवर्तन का पता कैसे लगा सकता हूं?
इस सर्वर कोड कंकाल है, मैं निश्चित रूप से प्रदर्शित करने के लिए वस्तुओं की सूची से युक्त json के साथ पाठ संदेश की जगह लेंगे:
def event_stream():
import time
while True:
time.sleep(1)
yield "data: This is a message number X.\n\n"
@app.route('/stream')
def stream():
return Response(event_stream(), mimetype="text/event-stream")
यह वह समाधान था जो मैं अंत में आया था, आपके उत्तर के लिए धन्यवाद। – NindzAI
यह मेरी राय में एक बुरा समाधान है। यदि ब्राउज़र इसे निष्पादित नहीं करता है तो यह स्मृति रिसाव का कारण बन सकता है (अप्रत्याशित रूप से क्रैश हो रहा है, कनेक्शन नीचे चला जाता है आदि)। –
यही कारण है कि मैंने नोट किया "आपके पास क्रोम जैसे कुछ करने के लिए कुछ और काम हो सकता है" (जो डेवलपर को इस तरह की घटनाओं को आग लगने की इजाजत नहीं दे सकता है ...) – bbenne10