काॅमेट प्रोग्रामिंग

धूमकेतु एक वेब अनुप्रयोग मॉडल है जिसमें एक लंबे समय से आयोजित HTTPS अनुरोध एक वेब सर्वर को एक वेब ब्राउज़र के लिए तकनीकी डेटा पुश करने की अनुमति देता है, बिना ब्राउज़र के स्पष्ट रूप से अनुरोध किए। धूमकेतु एक छत्र शब्द है, जिसमें इस अंतःक्रिया को प्राप्त करने के लिए कई तकनीकों को शामिल किया गया है। ये सभी विधियाँ गैर-डिफ़ॉल्ट प्लगइन्स के बजाय ब्राउज़रों में डिफ़ॉल्ट रूप से शामिल सुविधाओं पर निर्भर करती हैं, जैसे कि जावास्क्रिप्ट। धूमकेतु का दृष्टिकोण वर्ल्ड वाइड वेब#फंक्शन से भिन्न है, जिसमें एक ब्राउज़र एक समय में एक पूर्ण वेब पेज का अनुरोध करता है।

वेब विकास में धूमकेतु तकनीकों का उपयोग सामूहिक तकनीकों के लिए एक निओलिज़्म के रूप में धूमकेतु शब्द के उपयोग से पहले का है। धूमकेतु सहित कई अन्य नामों से जाना जाता है अजाक्स पुश, रिवर्स अजाक्स, टू-वे-वेब, HTTP स्ट्रीमिंग, और HTTP पुश दूसरों के बीच में। कॉमेट शब्द एक संक्षिप्त शब्द नहीं है, लेकिन एलेक्स रसेल ने अपने 2006 के ब्लॉग पोस्ट कॉमेट: लो लेटेंसी डेटा फॉर द ब्राउजर में गढ़ा था। हाल के वर्षों में, वेबसॉकेट और सर्वर-भेजे गए कार्यक्रमों के मानकीकरण और व्यापक समर्थन ने धूमकेतु मॉडल को अप्रचलित कर दिया है।

शुरुआती जावा एप्लेट्स
जावा एप्लेट्स को ब्राउज़रों में एम्बेड करने की क्षमता (मार्च 1996 में नेटस्केप नेविगेटर 2.0 के साथ शुरू) ) कच्चे प्रसारण नियंत्रण प्रोटोकॉल  सॉकेट का उपयोग करके दो-तरफ़ा निरंतर संचार को संभव बनाया ब्राउज़र और सर्वर के बीच संचार करने के लिए। यह सॉकेट तब तक खुला रह सकता है जब तक ब्राउज़र एप्लेट को होस्ट करने वाले दस्तावेज़ पर है। ईवेंट सूचनाएं किसी भी प्रारूप में भेजी जा सकती हैं –  टेक्स्ट या बाइनरी –  और एप्लेट द्वारा डिकोड किया गया।

पहला ब्राउज़र-टू-ब्राउज़र संचार ढांचा
ब्राउज़र-टू-ब्राउज़र संचार का उपयोग करने वाला पहला एप्लिकेशन टैंगो इंटरएक्टिव था, 1996-98 में नॉर्थईस्ट पैरेलल आर्किटेक्चर सेंटर (NPAC) में सिराकस यूनिवर्सिटी में DARPA फंडिंग का उपयोग करके लागू किया गया। टैंगो वास्तुकला को सिरैक्यूज़ विश्वविद्यालय द्वारा पेटेंट कराया गया है। दूरस्थ शिक्षा उपकरण के रूप में टैंगो ढांचे का बड़े पैमाने पर उपयोग किया गया है। CollabWorx द्वारा इस ढांचे का व्यावसायीकरण किया गया है और संयुक्त राज्य अमेरिका के रक्षा विभाग में एक दर्जन या इतने ही कमान और नियंत्रण और प्रशिक्षण अनुप्रयोगों में उपयोग किया गया है।.

पहला धूमकेतु अनुप्रयोग
धूमकेतु कार्यान्वयन का पहला सेट 2000 से पहले का है, Pushlets, Lightstreamer, और KnowNow परियोजनाओं के साथ। Pushlets, Just van den Broecke द्वारा बनाया गया एक ढांचा, सबसे पहले में से एक था खुला स्रोत कार्यान्वयन। पुशलेट सर्वर-साइड जावा सर्वलेट्स और क्लाइंट-साइड जावास्क्रिप्ट लाइब्रेरी पर आधारित थे। बैंग नेटवर्क –  नेटस्केप के सह-संस्थापक मार्क आंद्रेसेन द्वारा समर्थित एक सिलिकॉन वैली स्टार्ट-अप –  के पास संपूर्ण वेब के लिए एक रीयल-टाइम पुश मानक बनाने का भरपूर वित्तपोषित प्रयास था। अप्रैल 2001 में, चिप मॉर्निंगस्टार ने एक जावा-आधारित (J2SE) वेब सर्वर विकसित करना शुरू किया, जो दो HTTP सॉकेट का उपयोग करता था, जो उनके द्वारा डिज़ाइन किए गए कस्टम HTTP सर्वर और डगलस क्रॉकफोर्ड द्वारा डिज़ाइन किए गए क्लाइंट के बीच दो संचार चैनलों को खुला रखता था; जून 2001 तक एक कार्यशील डेमो सिस्टम अस्तित्व में था। सर्वर और क्लाइंट ने एक मैसेजिंग प्रारूप का उपयोग किया जिसे क्रॉकफोर्ड के सुझाव के बाद स्टेट सॉफ्टवेयर, इंक. के संस्थापकों ने JSON के रूप में बनाने के लिए सहमति दी। संपूर्ण सिस्टम, क्लाइंट लाइब्रेरी, मैसेजिंग फॉर्मेट जिसे JSON और सर्वर के रूप में जाना जाता है, स्टेट एप्लिकेशन फ्रेमवर्क बन गया, जिसके कुछ हिस्सों को Sun Microsystems, Amazon.com, EDS और Volkswagen द्वारा बेचा और इस्तेमाल किया गया।

मार्च 2006 में, सॉफ्टवेयर इंजीनियर एलेक्स रसेल ने अपने निजी ब्लॉग पर एक पोस्ट में धूमकेतु शब्द गढ़ा। नया शब्द अजाक्स (प्रोग्रामिंग) (अजाक्स (क्लीन्ज़र) और धूमकेतु (क्लीन्ज़र) दोनों संयुक्त राज्य अमेरिका में आम घरेलू क्लीनर होने पर एक नाटक था)। रेफरी> 2006 में, कुछ अनुप्रयोगों ने उन तकनीकों को व्यापक दर्शकों के सामने उजागर किया: मीबो के बहु-प्रोटोकॉल वेब-आधारित चैट एप्लिकेशन ने उपयोगकर्ताओं को एओएल इंस्टेंट मैसेंजर, याहू! ब्राउज़र के माध्यम से मैसेंजर, और एमएसएन मैसेंजर चैट प्लेटफॉर्म; Google ने जीमेल लगीं  में वेब-आधारित चैट जोड़ी; JotSpot, Google द्वारा अधिग्रहित होने के बाद से एक स्टार्टअप, ने धूमकेतु-आधारित वास्तविक समय सहयोगी दस्तावेज़ संपादन का निर्माण किया। नए धूमकेतु वेरिएंट बनाए गए थे, जैसे कि जावा-आधारित ICEfaces JavaServer Faces फ्रेमवर्क (हालांकि वे अजाक्स पुश शब्द को पसंद करते हैं) ). अन्य जो पहले जावा-एप्लेट आधारित ट्रांसपोर्ट का इस्तेमाल करते थे, शुद्ध-जावास्क्रिप्ट कार्यान्वयन के बजाय स्विच किए गए थे।

कार्यान्वयन
धूमकेतु अनुप्रयोग वर्ल्ड वाइड वेब # फंक्शन | पृष्ठ-दर-पृष्ठ वेब मॉडल और पारंपरिक मतदान (कंप्यूटर विज्ञान) की सीमाओं को समाप्त करने का प्रयास करते हैं, सर्वर और के बीच एक निरंतर या लंबे समय तक चलने वाले HTTP कनेक्शन का उपयोग करके दो-तरफा निरंतर बातचीत की पेशकश करते हैं। ग्राहक। चूंकि ब्राउज़र और प्रॉक्सी को सर्वर ईवेंट को ध्यान में रखकर नहीं बनाया गया है, इसलिए इसे हासिल करने के लिए कई तकनीकें विकसित की गई हैं, जिनमें से प्रत्येक के अलग-अलग लाभ और कमियां हैं। सबसे बड़ी बाधा हाइपरटेक्स्ट परहस्त शिष्टाचार  1.1 विनिर्देश है, जो इस विनिर्देश को बताता है... ग्राहकों को कई कनेक्शन खोलते समय रूढ़िवादी होने के लिए प्रोत्साहित करता है। इसलिए, वास्तविक समय की घटनाओं के लिए एक कनेक्शन खुला रखने से ब्राउज़र की उपयोगिता पर नकारात्मक प्रभाव पड़ता है: पिछले अनुरोध के परिणामों की प्रतीक्षा करते समय ब्राउज़र को एक नया अनुरोध भेजने से रोका जा सकता है, उदाहरण के लिए, छवियों की एक श्रृंखला। वास्तविक समय की जानकारी के लिए एक अलग होस्ट का नाम  बनाकर इसे हल किया जा सकता है, जो एक ही भौतिक सर्वर के लिए उपनाम है। यह रणनीति डोमेन शार्डिंग का एक अनुप्रयोग है।

धूमकेतु को लागू करने के विशिष्ट तरीके दो प्रमुख श्रेणियों में आते हैं: स्ट्रीमिंग और लंबा मतदान ।

स्ट्रीमिंग
स्ट्रीमिंग धूमकेतु का उपयोग करने वाला एक एप्लिकेशन वेब ब्राउज़र से सभी कॉमेट घटना (कंप्यूटिंग)  के लिए सर्वर पर एक सतत कनेक्शन खोलता है। हर बार जब सर्वर एक नया ईवेंट भेजता है, तो इन घटनाओं को ग्राहक की ओर से नियंत्रित और व्याख्यायित किया जाता है, जिसमें कोई भी पक्ष कनेक्शन बंद नहीं करता है। स्ट्रीमिंग धूमकेतु को पूरा करने की विशिष्ट तकनीकों में निम्नलिखित शामिल हैं:

हिडन आईफ्रेम
डायनेमिक वेब एप्लिकेशन के लिए एक बुनियादी तकनीक एक छिपे हुए HTML तत्व # फ्रेम्स HTML तत्व (एक इनलाइन फ्रेम, जो एक वेबसाइट को एक HTML दस्तावेज़ को दूसरे के अंदर एम्बेड करने की अनुमति देता है) का उपयोग करना है। यह अदृश्य आईफ्रेम एक चुनकेड ट्रांसफर एन्कोडिंग ब्लॉक के रूप में भेजा जाता है, जो इसे असीमित रूप से लंबे समय तक घोषित करता है (कभी-कभी हमेशा के लिए फ्रेम कहा जाता है)। जैसे ही घटनाएं होती हैं, आईफ्रेम धीरे-धीरे भर जाता है  टैग, जिसमें ब्राउज़र में निष्पादित होने वाली जावास्क्रिप्ट शामिल है। क्योंकि ब्राउज़र HTML पृष्ठों को वृद्धिशील रूप से प्रस्तुत करते हैं, प्रत्येक   टैग प्राप्त होते ही निष्पादित किया जाता है। कुछ ब्राउज़रों को पार्सिंग और निष्पादन शुरू करने से पहले एक विशिष्ट न्यूनतम दस्तावेज़ आकार की आवश्यकता होती है, जिसे शुरू में 1-2 kB पैडिंग स्पेस भेजकर प्राप्त किया जा सकता है। iframes पद्धति का एक लाभ यह है कि यह प्रत्येक सामान्य ब्राउज़र में काम करती है। इस तकनीक के दो डाउनसाइड एक विश्वसनीय त्रुटि प्रबंधन पद्धति की कमी है, और अनुरोध कॉलिंग प्रक्रिया की स्थिति को ट्रैक करने की असंभवता है।

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

लंबे मतदान के साथ अजाक्स
उपरोक्त स्ट्रीमिंग ट्रांसपोर्ट में से कोई भी नकारात्मक साइड-इफेक्ट के बिना सभी आधुनिक ब्राउज़रों में काम नहीं करता है। यह धूमकेतु डेवलपर्स को ब्राउज़र के आधार पर उनके बीच स्विच करने, कई जटिल स्ट्रीमिंग ट्रांसपोर्ट को लागू करने के लिए मजबूर करता है। नतीजतन, कई धूमकेतु अनुप्रयोग लंबे मतदान का उपयोग करते हैं, जो कि ब्राउज़र पक्ष पर लागू करना आसान है, और XHR का समर्थन करने वाले प्रत्येक ब्राउज़र में कम से कम काम करता है। जैसा कि नाम से पता चलता है, लंबे मतदान के लिए क्लाइंट को किसी ईवेंट (या ईवेंट के सेट) के लिए सर्वर को पोल करने की आवश्यकता होती है। ब्राउज़र सर्वर के लिए एक अजाक्स-शैली का अनुरोध करता है, जो तब तक खुला रहता है जब तक सर्वर के पास ब्राउज़र को भेजने के लिए नया डेटा नहीं होता है, जो ब्राउज़र को पूर्ण प्रतिक्रिया में भेजा जाता है। बाद की घटनाओं को प्राप्त करने के लिए ब्राउज़र एक नया लंबा मतदान अनुरोध शुरू करता है। IETF RFC 6202 लॉन्ग पोलिंग और द्विदिश HTTP में स्ट्रीमिंग के उपयोग के लिए ज्ञात मुद्दे और सर्वोत्तम अभ्यास लंबे पोलिंग और HTTP स्ट्रीमिंग की तुलना करता है। लंबे मतदान को पूरा करने के लिए विशिष्ट तकनीकों में निम्नलिखित शामिल हैं:

XMLHttpलंबी पोलिंग का अनुरोध करें
अधिकांश भाग के लिए, XMLHttpRequest लंबा मतदान XHR के किसी भी मानक उपयोग की तरह काम करता है। ब्राउज़र सर्वर के लिए एक अतुल्यकालिक अनुरोध करता है, जो प्रतिक्रिया देने से पहले डेटा के उपलब्ध होने की प्रतीक्षा कर सकता है। प्रतिक्रिया में क्लाइंट द्वारा निष्पादित किए जाने वाले एन्कोडेड डेटा (आमतौर पर XML या JSON) या जावास्क्रिप्ट शामिल हो सकते हैं। प्रतिक्रिया के प्रसंस्करण के अंत में, ब्राउज़र अगली घटना की प्रतीक्षा करने के लिए एक और एक्सएचआर बनाता है और भेजता है। इस प्रकार ब्राउज़र हमेशा सर्वर के साथ एक अनुरोध बकाया रखता है, जिसका उत्तर प्रत्येक घटना के रूप में दिया जाता है।

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

आइफ्रेम या XMLHttpRequest ऑब्जेक्ट के विपरीत,  टैग किसी भी यूनिफॉर्म रिसोर्स पहचानकर्ता पर इंगित किए जा सकते हैं, और प्रतिक्रिया में जावास्क्रिप्ट कोड को वर्तमान HTML दस्तावेज़ में निष्पादित किया जाएगा। यह शामिल दोनों सर्वरों के लिए एक संभावित सुरक्षा जोखिम पैदा करता है, हालांकि JSONP का उपयोग करके डेटा प्रदाता (हमारे मामले में, धूमकेतु सर्वर) के लिए जोखिम से बचा जा सकता है।

गतिशील रूप से निर्माण करके एक लंबी मतदान धूमकेतु परिवहन बनाया जा सकता है  तत्व, और उनके स्रोत को धूमकेतु सर्वर के स्थान पर सेट करना, जो उसके पेलोड के रूप में कुछ घटना के साथ जावास्क्रिप्ट (या JSONP) को वापस भेजता है। हर बार जब स्क्रिप्ट अनुरोध पूरा हो जाता है, तो ब्राउज़र एक नया ब्राउज़र खोलता है, ठीक उसी तरह जैसे XHR लॉन्ग पोलिंग केस में होता है। क्रॉस-डोमेन कार्यान्वयन की अनुमति देते हुए भी इस पद्धति का क्रॉस-ब्राउज़र होने का लाभ है।

विकल्प
ब्राउज़र-देशी प्रौद्योगिकियां धूमकेतु शब्द में निहित हैं। गैर-मतदान HTTP संचार को बेहतर बनाने के प्रयास कई पक्षों से आए हैं:


 * वेब हाइपरटेक्स्ट एप्लिकेशन टेक्नोलॉजी वर्किंग ग्रुप (WHATWG) द्वारा तैयार किया गया HTML 5 ड्राफ्ट विनिर्देश कथित सर्वर-भेजे गए ईवेंट को निर्दिष्ट करता है, जो एक नए जावास्क्रिप्ट इंटरफ़ेस को परिभाषित करता है  और एक नया MIME प्रकार  . Server-sent_events#Web_browsers में यह तकनीक शामिल है।
 * HTML 5 WebSocket API वर्किंग ड्राफ्ट एक सर्वर के साथ लगातार कनेक्शन बनाने और संदेश प्राप्त करने के लिए एक विधि निर्दिष्ट करता है  वापस कॉल करें।
 * डोजो फाउंडेशन की ओर से बेयक्‍स प्रोटोकॉल। यह ब्राउज़र-विशिष्ट ट्रांसपोर्ट को जगह में छोड़ देता है, और ब्राउज़र और सर्वर के बीच संचार के लिए एक उच्च-स्तरीय प्रोटोकॉल को परिभाषित करता है, जिसका उद्देश्य क्लाइंट-साइड जावास्क्रिप्ट कोड को कई धूमकेतु सर्वरों के साथ पुन: उपयोग करने की अनुमति देता है, और उसी धूमकेतु सर्वर को संचार करने की अनुमति देता है। एकाधिक क्लाइंट-साइड जावास्क्रिप्ट कार्यान्वयन के साथ। Bayeux एक प्रकाशित/सदस्यता मॉडल पर आधारित है, इसलिए Bayeux का समर्थन करने वाले सर्वर में अंतर्निहित प्रकाशित/सदस्यता है।
 * एक्सएमपीपी मानक फाउंडेशन द्वारा बॉश (प्रोटोकॉल) प्रोटोकॉल। यह दो तुल्यकालिक HTTP कनेक्शन का उपयोग करके ब्राउज़र और सर्वर के बीच एक द्विदिश धारा का अनुकरण करता है।
 * डगलस क्रॉकफ़ोर्ड द्वारा प्रस्तावित JSONRequest ऑब्जेक्ट, XHR ऑब्जेक्ट का एक विकल्प होगा।
 * प्लगइन्स का उपयोग, जैसे कि जावा एप्लेट्स या मालिकाना एडोब फ्लैश (फ्लैश अनुप्रयोगों के लिए डेटा स्ट्रीमिंग के लिए रीयल-टाइम मैसेजिंग प्रोटोकॉल प्रोटोकॉल का उपयोग करना)। उपयुक्त प्लगइन के साथ सभी ब्राउज़रों में समान रूप से काम करने का फायदा है और HTTP कनेक्शन पर भरोसा करने की आवश्यकता नहीं है, लेकिन प्लगइन को स्थापित करने की आवश्यकता का नुकसान
 * गूगल ने घोषणा की Google ऐप इंजन के लिए एक नया चैनल एपीआई, ब्राउजर पर क्लाइंट जावास्क्रिप्ट लाइब्रेरी की मदद से कॉमेट जैसी एपीआई को लागू करना। इस एपीआई को बहिष्कृत कर दिया गया है।

यह भी देखें

 * धक्का प्रौद्योगिकी
 * प्रौद्योगिकी खींचो