सर्वर-भेजे गए ईवेंट पर एक नज़र डालें। सर्वर से भेजे गए इवेंट एब्रोसर एपीआई हैं जो आपको अपडेट के एस्ट्रीम की सदस्यता लेते हुए अपने सर्वर पर एक सॉकेट खोलने की सुविधा देता है। अधिक जानकारी के लिए एलेक्स मैककॉ (जॉगर्नॉट के लेखक) की पोस्ट पढ़ें कि वह बाजीगर को क्यों मारता है और क्यों सरल सर्वर-भेजे गए ईवेंट कई मामलों में वेबसोकेट की तुलना में नौकरी के लिए बेहतर उपकरण हैं।
प्रोटोकॉल वास्तव में आसान है। बस mimetype text/event-stream
जोड़ें आपकी प्रतिक्रिया के लिए। ब्राउज़र कनेक्शन को खुला रखेगा और अपडेट सुनेगा। सर्वर से एक ईवेंट्सेंट data:
. से शुरू होने वाली टेक्स्ट की एक पंक्ति है और एक निम्नलिखित नई पंक्ति।
data: this is a simple message
<blank line>
यदि आप संरचित डेटा का आदान-प्रदान करना चाहते हैं, तो बस अपने डेटा को json के रूप में डंप करें और json को वायर पर भेजें।
एक फायदा यह है कि आप अतिरिक्त सर्वर की आवश्यकता के बिना फ्लास्क में एसएसई का उपयोग कर सकते हैं। जीथब पर एक साधारण चैट एप्लिकेशन उदाहरण है जो रेडिस को पब/उप बैकएंड के रूप में उपयोग करता है।
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('/post', methods=['POST'])
def post():
message = flask.request.form['message']
user = flask.session.get('user', 'anonymous')
now = datetime.datetime.now().replace(microsecond=0).time()
red.publish('chat', u'[%s] %s: %s' % (now.isoformat(), user, message))
@app.route('/stream')
def stream():
return flask.Response(event_stream(),
mimetype="text/event-stream")
उदाहरण ऐप चलाने के लिए आपको गनिक्रॉन का उपयोग करने की आवश्यकता नहीं है। ऐप चलाते समय बस थ्रेडिंग का उपयोग करना सुनिश्चित करें, क्योंकि अन्यथा एसएसई कनेक्शन आपके डेवलपमेंट सर्वर को ब्लॉक कर देगा:
if __name__ == '__main__':
app.debug = True
app.run(threaded=True)
क्लाइंट साइड पर आपको केवल एक Javascript हैंडलर फ़ंक्शन की आवश्यकता होती है जिसे सर्वर से एक नया संदेश पुश किए जाने पर कॉल किया जाएगा।
var source = new EventSource('/stream');
source.onmessage = function (event) {
alert(event.data);
};
सर्वर-भेजे गए इवेंट हाल ही के फ़ायरफ़ॉक्स, क्रोम और सफारी ब्राउज़र द्वारा समर्थित हैं। इंटरनेट एक्सप्लोरर अभी तक सर्वर-भेजे गए ईवेंट का समर्थन नहीं करता है, लेकिन संस्करण 10 में उनका समर्थन करने की उम्मीद है। पुराने ब्राउज़र का समर्थन करने के लिए दो अनुशंसित पॉलीफ़िल हैं
- EventSource.js
- jquery.eventsource