2011-03-29 20 views
32

वर्तमान में मेरे पास Django में लिखा गया एक बहुत ही सरल वेब एप्लिकेशन है, और मैं अपने आवेदन में कॉलबैक/पुश अधिसूचना सेवा जैसे कुछ को कार्यान्वित करना चाहता हूं।उपयोगकर्ताओं के लिए Django पुश HTTP प्रतिक्रिया

उदाहरण के लिए: जब कोई उपयोगकर्ता (क्लाइंट) सर्वर पर एक फोटो अपलोड करता है, तो सर्वर उस फ़ोटो के बारे में अन्य सभी जुड़े उपयोगकर्ताओं को सूचित करता है।

मुझे लगता है कि जब कोई उपयोगकर्ता फोटो अपलोड करता है तो मैं कॉलबैक उत्पन्न करने के लिए Django संकेतों का उपयोग कर सकता हूं, लेकिन मैं अन्य उपयोगकर्ताओं को अधिसूचना पोस्ट करने के लिए Django कैसे प्राप्त करूं? यह अधिसूचना या तो अलर्ट हो सकती है या अन्य उपयोगकर्ताओं को एक नए एचटीएमएल पर रीडायरेक्ट कर सकती है जो अपलोड की गई तस्वीर प्रदर्शित करती है। मैं बाद वाले को पसंद करूंगा।

मैं वेब प्रोग्रामिंग में एक नौसिखिया हूं, इसलिए मुझे यकीन नहीं है कि यह बिल 'फिट-टाइम वेब एप्लिकेशन' की आवश्यकता के रूप में बिल फिट बैठता है जो धूमकेतु या लंबी-मतदान जैसी चीजों को लागू करता है। मेरा एप्लिकेशन चैट एप्लिकेशन के समान है, सिवाय इसके कि मैं टेक्स्ट फाइलें सबमिट नहीं कर रहा हूं लेकिन छवि फाइलें। इसके कारण मैंने सोचा कि धूमकेतु समाधान काम करेंगे। मैंने अब बहुत लंबे समय तक ऑर्बिटेड और ट्विस्टेड को देखने की कोशिश की है लेकिन डीजेगो के साथ इसे लागू करने में कोई भाग्य नहीं है, शायद इसलिए कि मुझे समझ में नहीं आता कि मैं धूमकेतु समाधानों के साथ क्या हासिल करना चाहता हूं। मैं चाहता हूं कि अधिक अनुभवी प्रोग्रामर मुझे इंगित करें कि यह पूरा करने के लिए मुझे क्या चाहिए, या यदि मैं सही दिशा में जा रहा हूं या नहीं (धूमकेतु के साथ)।

अगर कोई मुझे आगे बढ़ने के तरीके के साथ-साथ ट्यूटोरियल लिंक या गाइड के बारे में कुछ टिप्स और संकेत दे सकता है तो मैं वास्तव में इसकी सराहना करता हूं।

उत्तर

54

HTTP मूल रूप से एक "पुल" प्रोटोकॉल है - यानी, एक क्लाइंट सर्वर से डेटा खींचता है, थोड़ी देर के लिए इंतजार करता है और फिर बाद में अधिक डेटा खींचता है। सर्वर से क्लाइंट को डेटा "धक्का" देने के लिए वास्तव में कोई सख्ती से HTTP तरीका नहीं है।

जब आपको किसी ग्राहक को "धक्का" की आवश्यकता होती है तो आपके पास मूल रूप से तीन विकल्प होते हैं।

(1) मतदान करें - हर एक्स समय के सर्वर को मतदान करने के लिए अजाक्स/जावास्क्रिप्ट का उपयोग करें। एक्स जितना छोटा होगा उतना ही "धक्का" जैसा लगता है, लेकिन आपके सर्वर को इन अनुरोधों का लगातार जवाब देने का अनुभव भी होता है।

(2) websockets का उपयोग करें। एचटीएमएल 5 spec का हिस्सा websockets नामक कुछ है। Websockets एक ब्राउज़र को एक सर्वर के लिए लगातार कनेक्शन खोलने की अनुमति देता है। एक बार यह connetion खोला गया है डेटा को क्लाइंट से सर्वर और सर्वर से क्लाइंट में आगे और आगे पारंपरिक टीसीपी सॉकेट की तरह धकेल दिया जा सकता है। Websockets (आखिरी मैंने सुना) के साथ समस्या यह थी कि वे अभी भी ब्राउज़र के बीच थोड़ा स्वभावपूर्ण हो सकते हैं, और निश्चित रूप से पुराने ब्राउज़र में पर काम नहीं करेंगे।

(3) Flash with a Javascript interface का उपयोग करें। फ्लैश में persistent TCP connections सेट करने की क्षमता है, जिसका उपयोग डेटा को 'सामान्य' टीसीपी कनेक्शन के साथ धक्का/खींचने के लिए किया जा सकता है।


आप मैं सिफारिश करेंगे खरोंच से इस परियोजना को शुरू करने गया था, तो आप Socket.io साथ Node.js में अपने बैकएंड लिखें: (HTTP push examples in Flex इस अतः रूप में अच्छी तरह प्रश्न देखें)। सॉकेट.ओ "सॉकेट-जैसी" ढांचा है जिसे आप प्रोग्राम कर सकते हैं और उसके बाद जावास्क्रिप्ट क्लाइंट (जो आपके वेबब्रोसर में चलता है) समझदारी से उपयोग करने के लिए सबसे अच्छा "लगातार कनेक्शन" निर्धारित करता है - पहले यह वेबसाइट्स का उपयोग करने की कोशिश करता है, फिर फ़्लैश, फिर विभिन्न प्रकार के लंबे मतदान।


लेकिन जब से तुम जो बोलते हैं उसे आप पायथन/Django उपयोग करना चाहते हैं तो आप Django के साथ WebSockets प्रयोग करने के लिए Django-Websockets --a ढांचे की जांच करनी चाहिए। लेकिन अस्वीकरण लेखक को पृष्ठ पर डालने के लिए सुनिश्चित करना सुनिश्चित करें, इसका उपयोग करने से जुड़े कुछ महत्वपूर्ण कठिनाइयों/सीमाएं हैं, मुख्य रूप से क्योंकि Django को वेबसाइकिलों के साथ दिमाग में डिज़ाइन नहीं किया गया था।

मुझे लगता है कि आपका सर्वश्रेष्ठ दांव अजाक्स मतदान करने के लिए एक बुद्धिमान वापस आने के साथ WebSockets का उपयोग करते समय उपयोगकर्ता के ब्राउज़र इसका समर्थन नहीं करता जा रहा है खत्म हो जाएगा।

+2

+1 ठंडा सेम;) –

+0

मैं देखता हूं। आपके सुझावों के लिए धन्यवाद। मुझे अपना वेब फ्रेमवर्क प्लेटफॉर्म चुनने से पहले इस पुश सेवा के बारे में और अधिक शोध करना चाहिए था। हालांकि मेरे वेब ऐप के प्रारंभिक चरणों के दौरान ईमानदार होने के बावजूद मैंने कभी भी पुश सेवा की आवश्यकता नहीं सोचा है। अब मुझे लगता है कि यह होना अच्छा लगेगा, लेकिन विस्तार तक नहीं कि मैं अपने प्रोजेक्ट को एक नए बैकएंड के साथ दोबारा कर दूंगा। इसके अलावा, सुझाव Django-websockets के लिए धन्यवाद! मैं बस इसके साथ टिंकर हो सकता है। :) – evkwan

+3

WebSockets अब संस्करण 1.9 के बाद से uWSGI में समर्थित हैं ताकि अस्वीकरण अब अनदेखा किया जा सकता - https://github.com/unbit/uwsgi-docs/blob/master/WebSockets.rst – Ash

7

यदि आप कभी भी nginx का उपयोग करते हैं, जो एक अच्छी पसंद है :), तो आप पुश मॉड्यूल http://pushmodule.slact.net/ का उपयोग कर सकते हैं, मुझे इसका उपयोग करना आसान लगता है। आपके पास एक चैनल पर संदेश प्रकाशित करने के लिए एक यूआरएल है (जिसे उदाहरण के लिए प्रेस्डप्लिब के साथ पाइथन में आसानी से किया जा सकता है), और एक यूआरएल से चैनल खींचने के लिए एक यूआरएल (और एक चैनल एक से अधिक उपयोगकर्ता द्वारा उपयोग किया जा सकता है)। एक jquery एकीकरण के लिए http://blog.jamieisaacs.com/2010/08/27/comet-with-nginx-and-jquery/ भी देखें।

+1

धन्यवाद सुझाव देने के लिए! एक बार जब मैंने Django websockets की कोशिश की तो मैं इसे देख लूंगा क्योंकि यह समझने में थोड़ा आसान लग रहा है। – evkwan

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